2016-04-21 282 views
2

在假设的例子中,我有一个C++组件 -如何实例下,在QML ++组件 - 带参数的构造函数

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实例这样的组件?

+0

AFAIK,没有这样的功能。请参阅下面的答案。 – Tarod

回答

2

可能是一个解决办法是注册一个uncreatable类型和注册它创建带有参数的对象工厂类来发送你的参数的唯一途径。

例如,我使用模型工厂从C++创建SQL模型并使用过滤器参数。

ModelFactory { 
id: modelFactory 
} 

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