2016-03-25 15 views
3

私のQMLコードからアクセスできるQSortFilterProxyModelがあります。私はListViewでQMLコードを使っていますが、ListViewの外にある最初の要素にもアクセスしたいと思います。リストビューの外でQMLのQSortFilterProxyModel要素にアクセスするには

私が私のことを呼んだとします。QSortFilterProxyModelsortedObjectsListView私はちょうどmodel: sortedObjectsのようなmodelの特性にそれを渡し、delegateの特性の私はそれに指定された役割の名前によってアクセスできます。 ListViewの外でこれを行うにはどうすればよいですか? sortedObjects[0].someRoleNameのようなものです。

答えて

1

@mcchuは彼のポストで指摘したように、indexと呼ばれる機能がありますdataQSortFilterProxyModelに設定します。私はQMLの私QSortFilterProxyModel上で、これらの関数を呼び出すようにしようとした場合残念ながら、私は次のエラーを取得する:

したがって
TypeError: Property 'index' of object QSortFilterProxyModel(0x7fcff0c2af90) is not a function 

thisポストが提案されているよう。別のC++クラスを作成しました。私のQSortFilterProxyModelのconstポインタを受け取って、indexdata関数をラップし、目的の値を返します。このクラスはQMLコードから呼び出すことができるように登録されています。ここで

はコードです:

class SomeClass : public QObject { 
    Q_OBJECT 
public: 
    SomeClass(const QSortFilterProxyModel* sortedModel) { 
     m_sortedModel = sortedModel; 
    } 

    Q_INVOKABLE QVariant getValue() { 
     QVariant someTypeRole = m_sortedModel->data(m_sortedModel->index(0, 0), SomeModelClass::SomeRoles::SomeTypeRole); 
     if (someTypeRole.isValid()) { 
      return type = someTypeRole.toString(); // I know it is a QString for sure, but there are mechanisms to find out the type of the role 
     } 

     return QVariant(); 
    } 

private: 
    const QSortFilterProxyModel* m_sortedModel; 
}; 

EDIT:@Mitchはなく、唯一のQt 5.5から、彼のコメントの@ mcchuのソリューションの作品の中で指摘したよう

3

QSortFilterProxyModelは、QAbstractItemModelです。そしてQAbstractItemModelに、あなたはQMLで2つのQ_INVOKABLEの関数を呼び出すことによって、モデル内の要素にアクセスすることができます。

  1. indexQModelIndexを取得するには、その後、
  2. data
  3. は、そのインデックスに役割の値を取得するために

たとえば、someRoleNameのハッシュ値が1234(モデル内のroleNamesで定義されている)であるとします。 (モデルがリストされている場合、列0)あなたはQMLで、次の関数のように、行0でsomeRoleNameの値を取得することができます

function printSomeRoleNameInRow0() 
{ 
    var row = 0, col = 0, someRoleName = 1234; 
    var idx = sortedObjects.index(row, col); 
    var value = sortedObjects.data(idx, someRoleName); 
    console.log(value); 
} 
+0

ありがとうございます!私はあなたが上記で説明したものと同じロジックを考えていましたが、TypeError:オブジェクトQSortFilterProxyModel(0x7fcff0c2af90)のプロパティ 'index'が関数ではありません。私は 'QSortFilterProxyModel'のconstポインタを受け取って基本的に同じことをするC++クラスを作成します。それで私はそれを登録して、QMLから呼び出すことができます。私は数分で私のソリューションを投稿します。 – Silex

+3

@Silexでは、残念ながらそれを反映する変更ログエントリもドキュメントもなかったので、誰もあなたがそれを知っているとは思っていませんでしたが、関数はQt 5.5でのみ呼び出せました。 – Mitch

+0

それは本当に便利な情報です@ミッチ、ありがとう! – Silex

関連する問題