Как создать компонент 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

Другие вопросы по тегам