2017-07-13 3 views
0

C++側と仮定しますQObjectから派生したいくつかのカスタムオブジェクトを含むQList<QObject *> myObjectsを作成しました。その後、QObjectでQObjectListベースのモデルの特定の要素にアクセスする方法

そして質問は、私が取得し、(QListです)myModel内の特定の要素を(インデックスで)どのように使用できるか、私のQMLのコードでは、あるsetContextProperty("myModel", QVariant::fromValue(myObjects));

によってQMLに公開。たとえば、リストからランダムな要素を取り出して表示したいのですか?

ここにある例はhttp://doc.qt.io/qt-5/qtquick-models-objectlistmodel-example.htmlです。モデルのすべての要素がListViewに表示されていますが、そのうちの1つ(または複数)を表示したいだけです。

+0

QMLは[this](http://doc.qt.io/qt-5/qtqml-cppintegration-data.html#sequence-type-to-javascript-array)のドキュメントで説明されているように、 'QList <>'型を透過的にサポートしています。 C++配列は共通のJavaScript配列に変換されます。それを見てください[https://www.w3schools.com/js/js_arrays.asp] – folibis

+0

シンプルで基本的な質問ですが、これは必要な質問です。だから+1: –

答えて

1

もし[]演算子を使用することができ、リストからアイテムを取得する:QMLは後者に基づいているので

myModel[index] 

QListの要素はJavaScriptでの配列と類似しています。

次の例は、ランダムフォームで名前を取得する方法を示しています(例のコードのみが置換されます)。

view.qml

import QtQuick 2.0 
import QtQuick.Layouts 1.3 
import QtQuick.Controls 1.4 

//![0] 

ColumnLayout{ 
    ListView { 
     width: 100; height: 100 

     model: myModel 
     delegate: Rectangle { 
      height: 25 
      width: 100 
      color: model.modelData.color 
      Text { 
       text: name 
      } 
     } 


    } 

    Button { 
     text: "random" 
     onClicked: { 
      t.text = myModel[ Math.floor(Math.random()*myModel.length)].name; 
     } 
    } 
    Text{ 
     id: t 
     text: "" 
    } 
} 
+0

例をありがとう、今私はポイントを得る。 – Wayee

2

モデルからそのかなり簡単... ​​

取得する項目の番号i:

myModel[i] 

とそのプロパティ/役割にアクセスするには:

myModel[i].propertyName 
+0

シンプルで明確な答え。 'main.cpp'ファイルにqml型を登録してqmlでアクセスできるようにすることも忘れないでください。ドキュメントを参照してください。 –

関連する問題