如何在QML中实例化带有参数构造函数的C++组件

5
在假设的例子中,我有一个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内部实例化这样的组件?

据我所知,目前没有这样的功能。请看下面的答案。 - Tarod
2个回答

6
也许解决方案是注册一个不可创建的类型,并注册一个工厂类,用参数创建对象。
例如,我使用模型工厂从C++中创建带有过滤参数的SQL模型。
ModelFactory {
 id: modelFactory
}

ListView {
  model: modelFactory.createModel(filterparam1, filterparam2)
}

我尝试过了,但是modelFactory.createModel返回了null - eri

5

Q_PROPERTY 是使用 QML 属性传递参数的唯一方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接