2014-02-10 88 views
5

Qt的文檔似乎有點短暫的問題,但我試圖使用QLists作爲ListView的模型。 事情是,我代表一個層次結構,每當一個項目被點擊時,模型與另一個交換,QML從C++回調中獲取。QML ListView使用QList <QObject*>作爲模型

這是代表一個列表項的對象:

​​

和我如何使用它在QML:

ListView { 
    id: list_view 
    model: myModel 
    anchors.fill: parent 
    delegate: Item { 
    id: row 
    height: 50 
    anchors.left: parent.left 
    anchors.right: parent.right 

    MouseArea { 
     anchors.fill: row 
     onClicked: { 
     list_view.model = descent; 
     } 
    } 

    Column { 
     Text { text: name } 
     Text { text: subtitle } 
    } 
    } 
} 

的 「基於myModel」 模式被設置在主,像這樣:

context->setContextProperty("myModel", QVariant::fromValue(folder.getChildren())); 

第一次出現ListView時,它使用myModel作爲模型,它起作用。每當我點擊一個項目,但是,ListView會創建期望的項目的確切數量......但它不能讀取它們的任何屬性!

爲什麼ListView知道它需要創建多少物品,但看不到它們的屬性?

回答

5

我相信這是你正在觀察的正確行爲。 QML知道在QList元素的數量,但據查詢他們namesubtitle這是不可能的,因爲descent不符合的ListView::model

約束從QML文檔爲ListView::model property

該模型提供了用於創建 視圖中的項目的一組數據。模型可以使用ListModel, XmlListModel或VisualItemModel直接在QML中創建,或由C++模型類提供。如果使用C++模型類 ,它必須是QAbstractItemModel 的子類或簡單列表。

所以在這方面,你要麼必須改變descent是一個簡單的列表,我相信包含簡單數據的裝置,如單QStringint,等...或者實現它作爲QAbstractItemModel包含您的QObjects的列表。

+0

我聽說過QAbstractItemModel,並試圖不必這樣做:因爲我正在處理簡單的數據(僅限QString),所以我會研究'體面的'!謝謝! – Michael