2016-04-21 23 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) 
}