Accéder aux éléments de QStandardItemModel à partir de QML

(ÉDITÉ) Dans la question initiale, j’avais supposé à tort que GridView utilisait de manière native un modèle bidimensionnel. En effet, la liste des éléments est similaire à celle des autres vues QML. Pour rendre la question et les réponses plus compréhensibles, j’ai légèrement modifié le code donné. De plus, j’ai ajouté une solution de travail basée sur les réponses.

Dans le programme principal, je définis une instance de QStandardItemModel:

QScopedPointer app(createApplication(argc, argv)); QmlApplicationViewer viewer; QStandardItemModel* cppmodel = new QStandardItemModel(); for (int i=0; iappendRow(item); } 

Ensuite, j’enregistre le modèle sur QML avec:

 viewer.rootContext()->setContextProperty("cppModel",cppmodel); 

QStandardItemModel est une table, n’est-ce pas? Ensuite, comment puis-je écrire un délégué pour afficher les éléments dans un simple GridView:

  GridView { model: cppModel delegate: Rectangle { Text { text: ??? } //WHAT MUST BE USED HERE ??? } } 

Dois-je utiliser des rôles nommés ou puis-je simplement utiliser des index correctement créés?

Peut-être que cela vous aide:
Utilisation de QStandardItemModel dans QML

Aussi, vous pouvez essayer un tel code:

 GridView { anchors.fill: parent model: cppModel delegate: Rectangle { Text { text: display; } } } 

Puisque cette question a 3 mois, vous avez probablement déjà une réponse, mais pour aider les autres:

La réponse courte est d’utiliser:

 datalist.currentIndex = index; 

Par exemple, avec un ListView, cela a fonctionné pour moi:

 ListView { id: datalist model: cppModel delegate: Rectangle { Text { text: display; } } } 

 MouseArea { anchors.fill: parent; onClicked: { datalist.currentIndex = index; } } 

Cela semblait être une chose dont tout le monde aurait besoin, mais je ne l’ai trouvé dans aucun des exemples ListView.

Voici l’exemple complet et pratique de la solution. Merci pour toute aide.

=== cppmodel.h ===

 #include  class CppModel : public QStandardItemModel { private: Q_OBJECT public: explicit CppModel(QObject *parent = 0) : QStandardItemModel(parent) {} public slots: void setDataInModel(const int i, const QSsortingng& txt) { setItem(i,new QStandardItem(txt)); } }; 

=== main.cpp ===

 #include  #include  #include "qmlapplicationviewer.h" #include "cppmodel.h" Q_DECL_EXPORT int main(int argc, char *argv[]) { QScopedPointer app(createApplication(argc, argv)); QmlApplicationViewer viewer; CppModel* cppmodel = new CppModel(); for (int i=0; i<100; i++) { QStandardItem* item = new QStandardItem(QString("%1").arg(i,2,10,QChar('0'))); cppmodel->appendRow(item); } viewer.rootContext()->setContextProperty("cppModel",cppmodel); viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto); viewer.setMainQmlFile(QLatin1Ssortingng("main.qml")); viewer.showExpanded(); return app->exec(); } 

=== main.qml ===

 import QtQuick 1.1 import com.nokia.meego 1.0 PageStackWindow { id: appWindow initialPage: mainPage Page { id: mainPage GridView { anchors.fill: parent model: cppModel delegate: Rectangle { height: itemText.height; width: itemText.width; Text { id: itemText text: display; } MouseArea { anchors.fill: parent; onClicked: { console.log("Clicked: "+index) cppModel.setDataInModel(index,"XX") } } } } } }