Ich versuche, eine QML-ListView mit einer Klasse zu füllen, die QAbstractListModel erbt. Bisher konnte ich dies mit der QT-Dokumentation erstellen here, unter dem "QAbstractItemModel Unterklasse" Abschnitt:Zugriff auf verschachtelte ListView mit QQmlContext
main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include "gamemodel.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
GameModel model; //A class similar to AnimalModel in Qt Documentation.
//It contains a QList of Objects, each having 2 QString
//members (title and genre).
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
model.readFile("c:/somePath/XML_G.xml"); //Initializing GameModel QList member
//using an XML file
QQmlContext *ctxt = engine.rootContext();
ctxt->setContextProperty("myModel", &model);
return app.exec();
}
main.qml
import QtQuick 2.5
import QtQuick.Window 2.2
Window
{
id: win
visible: true
width: 640
height: 480
title: qsTr("Hello World")
ListView
{
id: myList
width: parent.width
height: 50
clip: true
spacing: 5
orientation: ListView.Horizontal
model: myModel
delegate:
Rectangle
{
width: 150
height: 20
color: "#2255ff"
Text
{
text: gameTitle + " " + genre
}
}
}
}
Bis zu diesem Punkt funktioniert mein Code. wenn ich versuche, jedoch meine main.qml Datei wie folgt zu ändern:
import QtQuick 2.5
import QtQuick.Window 2.2
Window
{
id: win
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Item //ListView is now nested in this Item
{
ListView
{
id: myList
width: parent.width
height: 50
clip: true
spacing: 5
orientation: ListView.Horizontal
model: myModel
delegate:
Rectangle
{
width: 150
height: 20
color: "#2255ff"
Text
{
text: gameTitle + " " + genre
}
}
}
}
}
ich nicht in der Lage am Ende zu meinem Modell mit ctxt-> setContextProperty ("MyModel", & Modell) gesetzt;. Von dem, was ich aus der Qt-Dokumentation entnehmen kann (obwohl ich höchstwahrscheinlich falsch bin), fungiert QQmlContext als ein Bereich für die QML-Datei. Zu denken, dass habe ich versucht, dies zu ändern:
QQmlContext *ctxt = engine.rootContext();
dazu:
QQmlContext *ctxt = engine.rootContext()->findChild<QQmlContext*>("list");
Neben Einstellung meiner Artikel ObjektName Eigenschaft auf "Liste". Offensichtlich ist das gescheitert, und es hat auch einen Unfall verursacht. Da meine Erfahrung mit QML auf die Qt Docs beschränkt ist, konnte ich keinen Workaround finden. Ist eine Lösung mit QQmlContext möglich, oder muss ich QObject verwenden? Wenn ja, was würde das QObject-Äquivalent von ctxt-> setContextProperty ("myModel", & Modell) sein?
Versuchen Sie QQmlContext * ctxt = engine.rootContext(); ctxt-> setContextProperty ("meinModell", & -Modell); vor engine.load(). ZB direkt nachdem Sie Ihr Modell definiert haben, bevor Sie die Ansicht laden. – arynaq
Mein Code oben funktioniert normal. Ich möchte auf ein ListView zugreifen, das in einem anderen Item verschachtelt ist, wo ich gerade feststecke. – SASUPERNOVA