2012-12-25 21 views
5

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

+0

Il codice Qt5 non viene compilato. –

+0

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

+0

Ubuntu Linux x86_64, g ++ 4.6.3. –

risposta

3

Ho trovato un errore nel codice. roleNames() è un metodo costante. Ecco una linea di lavorazione di codice:

virtual QHash<int, QByteArray> roleNames() const { return _roles; } 

C'è un esempio di lavoro troppo: esempi/Quick/modelviews/abstractitemmodel.