2012-12-25 11 views
5

今日私は少し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 Qt5for Qt 4.8。私はあなたが問題の心を見つけるのを手伝ってくれることを願っています。

P.S.私はQt5バージョンでいくつかの変更を加えました。 Qt5の方法では、setRoleNames()は廃止され、roleNames()のオーバーライドが推奨されています。私はこのオーバーライドを行った。

P.P.S.私のコード例はGNU/Linux x64上でコンパイルできるはずです

+0

Qt5コードはコンパイルされません。 –

+0

trollixx、もしあなたが '' MiniModel ':不法会員初期化 'について話しているのなら、それは分かりませんでした。私はそれがGNU/Linux x64でテストされました。私はMSVCコンパイラで何が間違っているか調査する時間が必要です。 – Kakadu

+0

Ubuntu Linux x86_64、g ++ 4.6.3。 –

答えて

3

あなたのコードで間違いを発見しました。 roleNames()は定数メソッドです。

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

すぎて作業例があります:迅速/ modelviews/abstractitemmodel例/ここでは、コードの現用回線です。

関連する問題