2013-07-25 14 views
0
import QtQuick 2.0 
import QtQuick.XmlListModel 2.0 

XmlListModel { 
    id: ios_elementsModel 
    source: "/TestCode/PositionersAndRepeaters/PositionersAndRepeaters/menuitems.xml" 
    query: "/MenuItems/MenuItem" 

    XmlRole { name: "id"; query: "id/number()" } 
    XmlRole { name: "type"; query: "type/string()" } 
    XmlRole { name: "index"; query: "index/string()" } 
    XmlRole { name: "verbage"; query: "verbage/string()" } 
    XmlRole { name: "parentpageid"; query: "Parentpageid/number()" } 
    XmlRole { name: "destinationpageid"; query: "destinationpageid/number()" } 

}什麼是在一個Qt設爲Qml XmlLIstModel查詢

我使用Qt QML(Qt Quick的)與上述定義的XmlListModel正確使用變量的語法。

我測試了上面的代碼,它返回了xml文件中的所有項目。

我想使用一個變量來過濾項目。如ParentPageid = $ myselectedpage。你如何做這樣的事情?

回答

1

問題是XmlListModel存在來表示確切的源xml。如果你想有一個過濾列表,那麼你有三個明顯的選項,我可以看到。首先是讓呈現ListModel的組件確定顯示/隱藏哪些元素(根據您的標準顯示/隱藏委託)。其次,從XmlListModel生成一個只包含你想要的元素的新ListModel(這可以在JavaScript中完成,但如果在C++中完成,則顯着更快)。第三,讓C++層提供初始ListModel,並在構建要在QML中使用的ListModel時執行過濾。

如果您擔心內存和/或處理時間,我強烈建議在C++中完成邏輯的選項2/3。

根據要求,使用JS創建listmodel的詳細信息。要做到這一點,你需要有一個現有的ListModel已經。通過在QML文件中預先創建一個或使用動態QML對象創建來生成一個新的。然後使用發現http://qt-project.org/doc/qt-4.8/qml-listmodel.html的API並追加到你想要的元素中。

閱讀評論後,我終於意識到你是基於頁面過濾!在這一點上,我認爲你最好的選擇是跨所有組件共享ListModel,讓你的視圖確定顯示哪些元素

+0

你能指示我一些JavaScript代碼,可能會告訴我如何過濾它們。數據可能包含約150項,不會改變。所以,我相信JavaScript就足夠了。但是,如果我希望用C++重寫,那麼示例js代碼可能是有價值的。 –

+0

如果您始終在加載時過濾列表模型,並且xml不會更改,爲什麼不更改xml文件? – Deadron

+0

我不確定你的意思...你是否建議多個xmlListmodels,每個頁面實例一個? –