QMLのListViewからロールにアクセスしようとしています。基本的に、これはQMLにあります。
ListView {
id: myId
model: myModel
delegate: Item {
Text {
text: model.text
}
Text {
text: model.moreText
}
}
}
myModel
はQAbstractListModelの実装です。このQML部分は再利用可能なコンポーネントであるため、モデルはさまざまなデータ型を持つ任意の数の異なる役割を持つことができます。私がやりたいのは、ListViewのcurrentItem
プロパティの特定のロールの値にバインドすることです。つまり、次のように、リストビューで現在選択されているアイテムにプロパティをバインドできる他のComponent
をページに配置したいと思います。
Text {
text: myId.currentItem.text // Or myId.currentItem.model.text (or something similar)
}
多くのモデルタイプでこれを頻繁に行い、各モデルとListViewに対してそのようなカスタムコードを記述しないようにしているため、これは一般的に利用可能である必要があることに注意してください。
現在選択されているアイテムのプロパティにアクセスするのは簡単なはずですが、私が知る限り、それは不可能です。役割が1つしかない場合、モデルの扱いが異なるように見えるため、問題はさらに複雑になります。つまり、model.roleName
を介してロールにアクセスすることがありますが、ロールが1つしかない場合は、modelData
を使用します。
誰か提案があれば、本当にありがたいです。本当にありがとう!
[〜#〜]編集[〜#〜]
私はこれを見つけました:
http://comments.gmane.org/gmane.comp.lib.qt.qml/1778
しかし、これは私にはうまくいかないようです。 QMLスクリプトでデータを使用しようとすると、型エラーが発生します。また、型キャストが利用できないため、どうすればよいかわかりません。どんな提案でも大歓迎です!
ありがとう!
ジャック
http://comments.gmane.org/gmane.comp.lib.qt.qml/1778 のコードは機能するはずですが、プロパティの名前が「data」の場合はエラーが表示されます。既存の組み込みプロパティを上書きしているようです。名前を「myData」に変更すると機能するようです。
ListView {
id: myId
model: myModel
delegate: Item {
property variant myData: model
Text {
text: model.text
}
Text {
text: model.moreText
}
}
}
Text { text: myId.currentItem.myData.text }
(元の投稿のmyId.currentItem.textコードは、を参照しようとしていたため、機能しませんでした)存在しなかったデリゲート内のtextプロパティ。)
デリゲート内でmodelとmodelDataを参照することに関して、違いモデル内の役割の数ではなく、モデルのタイプによって異なります。モデルが文字列リストまたはオブジェクトリストの場合、modelDataを使用して、デリゲート内から個々の文字列またはオブジェクトを参照します(文字列リストおよびオブジェクトのため)リストには役割がありません)。 QMLListModelやQtC++ QAbstractItemModelを含む他のすべてのモデルでは、model.roleを使用してデリゲート内のロールを参照できます。
または、次のような方法でモデルに直接アクセスすることもできます。
Text { text: myModel[myId.currentIndex].text }
Get()関数を使用してListModelのListElementにアクセスできます。
Text { text: myModel.get(myId.currentIndex).text }