2012-12-25 13 views
5

में मॉडल और भूमिकाएं आज मैं क्यूटीक्विक 2 के साथ थोड़ा सा खेलना चाहता था। इसलिए मैंने क्विक 2 पर बहुत ही सरल क्यूटी क्विक 1 ऐप बंद करना शुरू कर दिया है। यह ऐप कुछ मॉडलों का उपयोग करता है। और क्यूटी 5 मॉडल में काम नहीं कर रहा है क्योंकि मैं उम्मीद करता हूं: मैं भूमिकाओं का उपयोग कर डेटा तक नहीं पहुंच सकता।क्यूटी 5 और क्यूटी 4.8

यह मेरा 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); 
     } 
    } 

Qt4.8 में मैं (इस QML में मेरी roleName = homm) 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। मुझे आशा है कि आप मुझे मामले के दिल को खोजने में मदद करेंगे।

पीएस मैंने क्यूटी 5 संस्करण में कुछ बदलाव किए हैं। Qt5 विधि setRoleNames() अप्रचलित है और roleNames() की ओवरराइडिंग की अनुशंसा की जाती है। मैंने यह ओवरराइड किया है।

पी.पी.एस. मेरा कोड उदाहरण जीएनयू/लिनक्स x64

+0

आपका क्यूटी 5 कोड संकलित नहीं करता है। –

+0

ट्रोलिक्स, यदि आप 'मिनीमोडेल' के बारे में बात कर रहे हैं: अवैध सदस्य प्रारंभिकरण 'यह उसे नहीं पता था। मुझे परीक्षण किया गया था कि जीएनयू/लिनक्स x64 पर। मुझे एमएसवीसी कंपाइलर में क्या गलत है इसकी जांच करने के लिए कुछ समय चाहिए। – Kakadu

+0

उबंटू लिनक्स x86_64, जी ++ 4.6.3। –

उत्तर

3

पर संकलित होना चाहिए मुझे आपके कोड में एक गलती मिली। roleNames() निरंतर विधि है।

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

एक काम उदाहरण भी नहीं है: उदाहरण/त्वरित/modelviews/abstractitemmodel यहाँ कोड का कार्यकारी लाइन है।