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()" }

}

我正在使用带有上面定义的 XmlListModel 的 Qt QML (qt quick)。

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

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

4

1 回答 1

1

问题是存在 XmlListModel 以准确表示源 xml。如果你想要一个过滤列表,那么我可以看到三个明显的选项。首先是让呈现 ListModel 的组件确定要显示/隐藏的元素(根据您的标准显示/隐藏委托)。其次,从仅包含您想要的元素的 XmlListModel 生成一个新的 ListModel(这可以在 javascript 中完成,但如果在 C++ 中完成,则速度要快得多)。第三,让 C++ 层提供初始 ListModel 并在构建要在 QML 中使用的 ListModel 时执行过滤。

如果您担心内存和/或处理时间,我强烈推荐选项 2/3,其中逻辑在 C++ 中完成。

根据要求,有关使用 JS 创建列表模型的详细信息。为此,您需要已经有一个现有的 ListModel。通过预先在 QML 文件中创建一个或通过使用动态 QML 对象创建来生成一个新的。然后使用找到的 api http://qt-project.org/doc/qt-4.8/qml-listmodel.html并附加您想要的元素。

阅读评论后,我终于意识到您正在根据页面进行过滤!在这一点上,我认为您最好的选择是在所有组件之间共享 ListModel 并让您的 View 确定要显示的元素

于 2013-07-25T17:44:19.693 回答