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

問題は、ソース xml を正確に表すために XmlListModel が存在することです。フィルタリングされたリストが必要な場合は、3 つの明白なオプションがあります。1 つ目は、ListModel を表示するコンポーネントに、表示/非表示にする要素を決定させることです (基準に基づいてデリゲートを表示/非表示にします)。次に、必要な要素のみを含む XmlListModel から新しい ListModel を生成します (これは JavaScript で実行できますが、C++ で実行すると大幅に高速になります)。3 番目に、C++ 層に初期 ListModel を提供させ、QML で使用される ListModel を構築するときにフィルタリングを実行します。

メモリや処理時間が心配な場合は、ロジックが C++ で実行されるオプション 2/3 を強くお勧めします。

リクエストに応じて、JS を使用したリストモデルの作成に関する詳細。これを行うには、既存の ListModel が既に存在している必要があります。QML ファイルで事前に作成するか、動的 QML オブジェクト作成を使用して新しいオブジェクトを生成します。次に、http ://qt-project.org/doc/qt-4.8/qml-listmodel.htmlにある API を使用して、必要な要素を追加します。

コメントを読んだ後、ページに基づいてフィルタリングしていることにようやく気付きました! この時点で、最善の選択肢は、すべてのコンポーネントで ListModel を共有し、View で表示する要素を決定することだと思います。

于 2013-07-25T17:44:19.693 に答える