今日は QtQuick2 で少し遊んでみました。そこで、非常にシンプルな Qt Quick1 アプリを Quick2 に移植し始めました。このアプリは一部のモデルを使用しています。また、Qt5 ではモデルが期待どおりに機能しません。ロールを使用してデータにアクセスできません。
これは私の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);
}
}
roleName
Qt4.8 では構文 (この QML では my roleName= )を使用してデータを取得できましhomm
たが、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
これはQuick 1.1の場合です
MainModel(0x7fffe58182f0)
undefined
QDeclarativeVisualDataModelData(0x2372ea0)
QVariant(MiniModel*)
QVariant(MiniModel*)
ご覧のとおり、ロールを使用したデータへのアクセスは期待どおりに機能します。Qt5およびQt 4.8用のテスト アプリを作成しまし た。あなたが問題の核心を見つけるのを手伝ってくれることを願っています。
PS Qt5 バージョンにいくつかの変更を加えました。Qt5 メソッドsetRoleNames()
では廃止され、オーバーライドするroleNames()
ことをお勧めします。私はこのオーバーライドを行いました。
PPS 私のコード例は GNU/Linux x64 でコンパイルできるはずです