如何在QML中实例化C++组件 - WITH Parameterized Constructor

ess*_*eev 3 c++ qml qt-quick

在假设的例子中,我有一个C++组件 -

class Board : public QObject
{
    Q_OBJECT
public:
    //Q_PROPERTYs go here
    explicit Board(int rows, int columns)
    {
        matrix = std::vector<int>(rows, std::vector<int>(columns, 0));
    }

    ~Board()
    {
        matrix.clear();
    }

    Q_INVOKABLE void checkAndUpdateAdjecentCells(int row, int column);
    //setters and getters here.

signals:
    void matrixUpdated();

private:
    Board(QObject *parent) = default; //i intend to do this.
    Board(Board& b) = delete;
    int nRows_, nCols_;
    std::vector<std::vector> matrix;
};
Run Code Online (Sandbox Code Playgroud)

注册于main()像-

qmlRegisterType<Board>("SameGameBackend", 1, 0, "BubbleBoard");
Run Code Online (Sandbox Code Playgroud)

如何在QML中实例化这样,以便调用参数化构造函数?

预期的QML代码 -

BubbleBoard{
    id: bboard
    rows: 10
    columns: 10
}
Run Code Online (Sandbox Code Playgroud)

我们可以将此问题扩展到包含初始化列表.曾nRows_nCols_const int,构造本来

explicit Board(int rows, int columns):nRows_(rows), nCols_(columns){}
Run Code Online (Sandbox Code Playgroud)

是否可以从QML内部实例化这些组件?

小智 5

Q_PROPERTY是使用QML属性发送参数的唯一方法


jon*_*s68 5

可能的解决方案是注册一个不可创建的类型并注册一个使用参数创建对象的工厂类。

例如,我使用模型工厂从C ++使用过滤器参数创建sql模型。

ModelFactory {
 id: modelFactory
}

ListView {
  model: modelFactory.createModel(filterparam1, filterparam2)
}
Run Code Online (Sandbox Code Playgroud)