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 Qt5 và for 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
Mã Qt5 của bạn không biên dịch. –
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
Ubuntu Linux x86_64, g ++ 4.6.3. –