Heute wollte ich mit QtQuick2 ein wenig spielen. Also habe ich begonnen, sehr einfache Qt Quick1 App zu Quick2 zu portieren. Diese App verwendet einige Modelle. Und in Qt5 funktionieren die Modelle nicht wie erwartet: Ich kann nicht über Rollen auf Daten zugreifen.Models und Rollen in Qt5 und Qt 4.8
Das ist mein QML-Code:
import QtQuick 2.0
Rectangle {
width: 800
height: 360
ListView {
model: mainModel
spacing: 5
anchors.fill: parent
orientation: ListView.Vertical
delegate: Text {
text: "1"
Component.onCompleted: {
console.log(mainModel);
console.log(mainModel.roles());
console.log(model);
console.log(model.homm); // `homm` is my roleName
console.log(homm);
}
}
In Qt4.8 konnte ich Daten erhalten, mit roleName
Syntax (in diesem QML meines rolename = homm
), aber in QT5 kann ich nicht. Das ist, was in der Konsole geschrieben:
MainModel(0x7fff08beff80)
homm,wtf
QQuickVDMAbstractItemModelData(0x23c96e0)
undefined
file:///media/disk/kakadu/prog/qt/quick2test/qml/quick2test/main.qml:20: ReferenceError: homm is not defined
Und das ist für Quick 1,1
MainModel(0x7fffe58182f0)
undefined
QDeclarativeVisualDataModelData(0x2372ea0)
QVariant(MiniModel*)
QVariant(MiniModel*)
Wie Sie alle Details einsehen können den Zugriff auf mit Rollen wie erwartet. Ich habe Test-Apps für Sie erstellt: for Qt5 und for Qt 4.8. Ich hoffe, du wirst mir helfen, das Herz der Materie zu finden.
P.S. Ich habe einige Änderungen in der Qt5-Version vorgenommen. In Qt5 ist die Methode setRoleNames()
veraltet und das Überschreiben von roleNames()
wird empfohlen. Ich habe dies übertrieben.
P.P.S. Mein Codebeispiel sollte unter GNU/Linux x64 kompiliert werden.
Ihr Qt5-Code wird nicht kompiliert. –
trollixx, Wenn du über ''MiniModel' sprichst: illegale Member-Initialisierung 'Das wusste er nicht. Ich wurde auf GNU/Linux x64 getestet. Ich brauche etwas Zeit, um zu untersuchen, was im MSVC-Compiler falsch ist. – Kakadu
Ubuntu Linux x86_64, g ++ 4.6.3. –