5

今日は 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);
        }
    }

roleNameQt4.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 でコンパイルできるはずです

4

1 に答える 1

3

あなたのコードに間違いが見つかりました。roleNames()定数方式です。作業中のコード行は次のとおりです。

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

実例もあります: examples/quick/modelviews/abstractitemmodel.

于 2012-12-26T10:49:50.157 に答える