在假设的例子中,我有一个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 属性发送参数的唯一方法