今日私は少しQtQuick2を使いたいと思っていました。だから私は非常に単純なQt Quick1アプリをQuick2に移植し始めました。このアプリはいくつかのモデルを使用しています。そして、Qt5モデルでは、期待どおりに動作しません。ロールを使用してデータにアクセスすることはできません。Qt5とQt 4.8のモデルと役割
これは私のQMLコードです:
Qt4.8で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);
}
}
私は(このQMLで= homm
私のroleName)roleName
構文を使用してデータを取得することができたが、Qt5で、私はできません。
MainModel(0x7fff08beff80)
homm,wtf
QQuickVDMAbstractItemModelData(0x23c96e0)
undefined
file:///media/disk/kakadu/prog/qt/quick2test/qml/quick2test/main.qml:20: ReferenceError: homm is not defined
そして、あなたが期待通りの役割を使用してアクセスするデータが働く見ることができるように、それはクイック1.1
ためMainModel(0x7fffe58182f0)
undefined
QDeclarativeVisualDataModelData(0x2372ea0)
QVariant(MiniModel*)
QVariant(MiniModel*)
だ:それはコンソールで書かれているものです。私はあなたのためのテストアプリを作成しました: for Qt5とfor Qt 4.8。私はあなたが問題の心を見つけるのを手伝ってくれることを願っています。
P.S.私はQt5バージョンでいくつかの変更を加えました。 Qt5の方法では、setRoleNames()
は廃止され、roleNames()
のオーバーライドが推奨されています。私はこのオーバーライドを行った。
P.P.S.私のコード例はGNU/Linux x64上でコンパイルできるはずです
Qt5コードはコンパイルされません。 –
trollixx、もしあなたが '' MiniModel ':不法会員初期化 'について話しているのなら、それは分かりませんでした。私はそれがGNU/Linux x64でテストされました。私はMSVCコンパイラで何が間違っているか調査する時間が必要です。 – Kakadu
Ubuntu Linux x86_64、g ++ 4.6.3。 –