2012-12-25 39 views
5

Bugün QtQuick2 ile biraz oynamak istedim. Bu yüzden çok basit Qt Quick1 uygulamasını Quick2'ye başlattım. Bu uygulama bazı modeller kullanır. Ve Qt5 modellerinde beklediğim gibi çalışmıyor: Rolleri kullanarak veriye erişemiyorum.Qt5 ve Qt modellerinde rol ve roller 4.8

Bu benim QML kodudur:

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); 
     } 
    } 

Qt4.8 ben ama Qt5 içinde Yapamam (benim roleName = homm bu QML olarak) roleName sözdizimi kullanarak veri almak başardı.

MainModel(0x7fff08beff80) 
homm,wtf 
QQuickVDMAbstractItemModelData(0x23c96e0) 
undefined 
file:///media/disk/kakadu/prog/qt/quick2test/qml/quick2test/main.qml:20: ReferenceError: homm is not defined 

Ve beklendiği gibi roller çalışmak kullanarak veri erişimini görebileceğiniz gibi bu Çabuk 1.1

MainModel(0x7fffe58182f0) 
undefined 
QDeclarativeVisualDataModelData(0x2372ea0) 
QVariant(MiniModel*) 
QVariant(MiniModel*) 

içindir: Bu konsolda yazılır budur. Sizin için test uygulamaları oluşturdum: for Qt5 ve for Qt 4.8. Umarım maddenin kalbi bulmam için bana yardım edeceksin.

P.S. Qt5 sürümünde bazı değişiklikler yaptım. Qt5 yönteminde setRoleNames() geçersizdir ve roleNames()'un geçersiz kılınması önerilir. Bunu baştan sona yaptım.

P.P.S. Kod örneğim, GNU/Linux x64

+0

Qt5 kodunuz derlenmiyor. –

+0

trollixx, "MiniModel" hakkında konuşuyorsanız: yasadışı üye başlatma 'Bunu bilmiyordu. GNU/Linux x64 üzerinde test edilmiştim. MSVC derleyicisinde neyin yanlış olduğunu araştırmak için biraz zamana ihtiyacım var. – Kakadu

+0

Ubuntu Linux x86_64, g ++ 4.6.3. –

cevap

3

kodunda bulunabilir. roleNames() sabit bir yöntemdir.

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

de bir çalışma örneği var: hızlı/modelviews/abstractitemmodel örnekler/İşte kod bir çalışma cümlesi.