2017-07-13 2 views
0

Angenommen auf C++ - Seite habe ich eine QList<QObject *> myObjects erstellt, die mehrere benutzerdefinierte Objekte enthält, die von QObject abgeleitet sind.Wie auf ein bestimmtes Element in einem QObjectList-basierten Modell in QML zugreifen

Und dann ist es zu QML belichten von setContextProperty("myModel", QVariant::fromValue(myObjects));

Die Frage ist, in meinem QML-Code, wie kann ich ein bestimmtes Element erhalten und zu verwenden (durch den Index) in myModel (das ist ein QList ist). Zum Beispiel möchte ich ein zufälliges Element von der Liste nehmen und es zeigen?

Das Beispiel ist hier: http://doc.qt.io/qt-5/qtquick-models-objectlistmodel-example.html, wo alle Elemente des Modells in einer ListView angezeigt werden, während ich nur eine (oder mehrere) von ihnen zeigen möchte.

+0

QML unterstützt transparent 'QList <>' Typen wie in [this] (http://doc.qt.io/qt-5/qtqml-cppintegration-data.html#sequence-type-to-javascript-array) Dokument beschrieben . So wird C++ - Array in ein gängiges JavaScript-Array konvertiert. Sehen Sie es [hier] (https://www.w3schools.com/js/js_arrays.asp) – folibis

+0

so einfache und grundlegende Frage, aber das ist eine notwendige Frage. so +1 :) –

Antwort

1

Um ein Element aus der Liste erhalten Sie die [] Operator verwenden:

myModel[index] 

Die Elemente eines QList ähnlich sind in Javascript Arrays seit QML auf diesem basiert.

Das folgende Beispiel zeigt die Namen in zufälliger Form (ersetzt nur den Code im Beispiel).

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

Danke für das Beispiel, jetzt bekomme ich den Punkt. – Wayee

2

seine recht einfach ...

Artikelnummer i aus dem Modell zu erhalten:

myModel[i] 

und seine Eigenschaften/Funktionen zuzugreifen:

myModel[i].propertyName 
+0

Einfache und klare Antwort. Vergessen Sie auch nicht qml in die Datei 'main.cpp' einzutragen, um sie in qml zugänglich zu machen. Siehe Dokumentation. –

Verwandte Themen