Как создать компонент C++ в QML - WITH Parameterized Constructor
В гипотетическом примере у меня есть компонент 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?
2 ответа
Может быть решением было бы зарегистрировать необработанный тип и зарегистрировать фабричный класс, который создает объект с параметрами.
Например, я использую фабрику моделей для создания моделей sql из C++ с параметрами фильтра.
ModelFactory {
id: modelFactory
}
ListView {
model: modelFactory.createModel(filterparam1, filterparam2)
}
Q_PROPERTY - единственный способ отправить ваши параметры, используя свойство QML