如何在 QML 中实例化C++组件 - WITH 参数化构造函数



在假设的例子中,我有一个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;
};

注册main()如 -

qmlRegisterType<Board>("SameGameBackend", 1, 0, "BubbleBoard");

问题

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

预期的 QML 代码 -

BubbleBoard{
    id: bboard
    rows: 10
    columns: 10
}

我们可以扩展此问题以包括初始值设定项列表。如果nRows_nCols_const int,构造函数本来是

explicit Board(int rows, int columns):nRows_(rows), nCols_(columns){}

是否可以从 QML 内部实例化此类组件?

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

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

ModelFactory {
 id: modelFactory
}
ListView {
  model: modelFactory.createModel(filterparam1, filterparam2)
}
Q_PROPERTY是

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

最新更新