qml である種の c++ qt モデルを使用する必要があります。私はすでにQStandardItemModelを持っていますが、いわゆるsetRoleNames()のためにQMLでは機能しません。役割の説明を探していましたが、見つからないようです。qml で QStandardItemMOdel を使用する何らかの解決策を見つけました ( here ) が、「ロール」を使用するため、どのように機能するかわかりません。
Qtモデルの役割は何ですか?
ロールは、モデルのデータにアクセスするときに使用される単なる追加のセレクターです。役割を具体的にどのように解釈するかは、モデルとビュー次第です。モデルを使用するときは、モデルの動作を念頭に置いて、使用するロールを決定する必要があります。ロールを使用すると、さまざまな属性を各データ項目に付加できます。
具体例を見てみましょう。は と 以外のQStringListModel
すべてのロールを無視しEditRole
ますDisplayRole
。他のロールを使用する場合、データ アクセス操作は無視されます。いずれかの役割を使用して文字列を設定でき、使用される役割そのものがdataChanged()
シグナルによって示されます。どちらのロールを使用しても文字列にアクセスできます。これは仕様によるものであり、バインド チェーンを切断するために使用できるようになっています。
ロールの名前は、モデルのプロパティとして公開されます。TextEdit
たとえば、デリゲートのa をモデルにバインドする場合は、次のようにします。
delegate: Component {
TextInput {
id: editor
text: edit // show the "edit" role of the model, to break the binding loop
onTextChanged: model.display = text // set the display role of the model
}
}
Qt が提供する C++ アイテム モデルは、表示ロールと編集ロールを名前で定義します。カスタム モデルがあり、他の名前を提供したい場合は、Qt 5QAbstractItemModel::roleNames()
でハッシュを返すように再実装する必要があります。もちろん、このハッシュにはロールdisplay
とロールが含まれている必要があります。Qt 4 では、仮想ではないため、代わりedit
に使用する必要があります。setRoleNames()
roleNames()
別の回答で完全な例を提供しました。