2012-12-25 47 views
5

Hôm nay tôi muốn chơi với QtQuick2 một chút. Vì vậy, tôi đã bắt đầu cổng ứng dụng Qt Quick1 rất đơn giản để Quick2. Ứng dụng này sử dụng một số kiểu máy. Và trong các mô hình Qt5 không hoạt động như tôi mong đợi: Tôi không thể truy cập dữ liệu bằng cách sử dụng vai trò.Mô hình và vai trò trong Qt5 và Qt 4.8

Đây là mã QML tôi:

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

Trong Qt4.8 tôi đã có thể để có được dữ liệu sử dụng roleName cú pháp (trong QML này roleName tôi = homm) nhưng trong Qt5 Tôi không thể. Đó là những gì được viết trong giao diện điều khiển:

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

Và đó là cho nhanh 1,1

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

Như bạn thấy truy cập dữ liệu sử dụng vai trò làm việc như mong đợi. Tôi đã tạo các ứng dụng thử nghiệm cho bạn: for Qt5for Qt 4.8. Tôi hy vọng bạn sẽ giúp tôi tìm ra trái tim của vật chất.

P.S. Tôi đã thực hiện một số thay đổi trong phiên bản Qt5. Trong phương pháp Qt5, setRoleNames() đã lỗi thời và ghi đè số roleNames(). Tôi đã làm điều này trọng.

P.P.S. Ví dụ mã của tôi phải được biên dịch trên GNU/Linux x64

+0

Mã Qt5 của bạn không biên dịch. –

+0

trollixx, Nếu bạn đang nói về '' MiniModel ': khởi tạo thành viên bất hợp pháp' Nó không biết điều đó. Tôi đã được thử nghiệm trên GNU/Linux x64. Tôi cần một thời gian để điều tra những gì sai trong trình biên dịch MSVC. – Kakadu

+0

Ubuntu Linux x86_64, g ++ 4.6.3. –

Trả lời

3

Tôi đã tìm thấy lỗi trong mã của bạn. roleNames() là phương pháp không đổi. Dưới đây là một dòng mã đang hoạt động:

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

Có ví dụ đang hoạt động: example/quick/modelviews/abstractitemmodel.