Oggi volevo giocare un po 'con QtQuick2. Così ho iniziato a portare l'app Qt Quick1 molto semplice a Quick2. Questa app utilizza alcuni modelli. E in Qt5 i modelli non funzionano come previsto: non posso accedere ai dati usando i ruoli.Modelli e ruoli in Qt5 e Qt 4.8
Questo è il mio codice QML:
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 sono stato in grado di ottenere i dati utilizzando la sintassi roleName
(in questo QML mia roleName = homm
), ma in QT5 non posso. Questo è ciò che è scritto nella console:
MainModel(0x7fff08beff80)
homm,wtf
QQuickVDMAbstractItemModelData(0x23c96e0)
undefined
file:///media/disk/kakadu/prog/qt/quick2test/qml/quick2test/main.qml:20: ReferenceError: homm is not defined
E questo è per Quick 1,1
MainModel(0x7fffe58182f0)
undefined
QDeclarativeVisualDataModelData(0x2372ea0)
QVariant(MiniModel*)
QVariant(MiniModel*)
Come si può vedere l'accesso ai dati utilizzando i ruoli funzionano come previsto. Ho creato app di prova per te: for Qt5 e for Qt 4.8. Spero che mi aiuterai a trovare il cuore della materia.
P.S. Ho apportato alcune modifiche alla versione Qt5. Nel metodo Qt5, setRoleNames()
è obsoleto e si consiglia l'override di roleNames()
. Ho fatto questo sopraffare.
P.P.S. Il mio esempio di codice dovrebbe essere compilabile su GNU/Linux x64
Il codice Qt5 non viene compilato. –
trollixx, Se stai parlando di "MiniModel": inizializzazione di membri non autorizzati. Non lo sapeva. Sono stato testato su GNU/Linux x64. Ho bisogno di tempo per indagare su cosa non funziona nel compilatore MSVC. – Kakadu
Ubuntu Linux x86_64, g ++ 4.6.3. –