7

qml である種の c++ qt モデルを使用する必要があります。私はすでにQStandardItemModelを持っていますが、いわゆるsetRoleNames()のためにQMLでは機能しません。役割の説明を探していましたが、見つからないようです。qml で QStandardItemMOdel を使用する何らかの解決策を見つけました ( here ) が、「ロール」を使用するため、どのように機能するかわかりません。

Qtモデルの役割は何ですか?

4

1 に答える 1

10

ロールは、モデルのデータにアクセスするときに使用される単なる追加のセレクターです。役割を具体的にどのように解釈するかは、モデルとビュー次第です。モデルを使用するときは、モデルの動作を念頭に置いて、使用するロールを決定する必要があります。ロールを使用すると、さまざまな属性を各データ項目に付加できます。

具体例を見てみましょう。は と 以外の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()

別の回答で完全な例を提供しました。

于 2013-09-05T16:42:02.890 に答える