在Qt Qml XmlLIstModel查询中正确使用变量的语法是什么

时间:2013-07-25 15:54:29

标签: xml qt qml

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(qt quick)和上面定义的XmlListModel。

我测试了上面的代码,它返回了xml文件中的所有项目。

我想使用变量来过滤项目。例如Parentpageid = $ myselectedpage。你怎么做这样的事情?

1 个答案:

答案 0 :(得分: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并让您的View确定要显示的元素