QML

2010-12-16 12 views
6

को क्यूटी के Q_ENUMS उजागर मैं यहाँ स्पष्ट कुछ कमी हो सकती है, लेकिन जब, QML करने के लिए एक Q_ENUM बेनकाब करने के लिए कोशिश कर रहा है यहां तक ​​कि सबसे सरल मामले में, के रूप में क्यूटी डॉक्स (http://doc.qt.nokia.com/4.7-snapshot/qtbinding.html#using-enumerations-of-a-custom-type)QML

में दिखाया गया है काम करने के लिए प्रतीत नहीं होता

मैं एक साधारण परीक्षण का मामला बना लिया है, मेरी सी ++ वर्ग लगता है:

class MyClass : public QDeclarativeItem { 
    Q_OBJECT 
    Q_ENUMS(testType) 

public: 
    MyClass() : t(FirstValue) { } 
    enum testType { InvalidValue, FirstValue, SecondValue } ; 

    testType testVal() const { return t; } 
    Q_PROPERTY(testType testVal READ testVal NOTIFY testValChanged) 
private: 
    testType t; 

signals: 
    void testValChanged(); 
}; 

मैं तो रजिस्टर & QDeclartiveContext में इस वर्ग का एक उदाहरण इंजेक्षन।

जब मैं testVal प्रॉपर्टी को आज़माता हूं और एक्सेस करता हूं, तो यह एक स्ट्रिंग प्रस्तुति के बजाय पूर्णांक (इस मामले में 1) देता है। इसके अलावा, उदाहरण के लिए, 'Avar' के रूप में इंजेक्शन अगर मैं कोशिश करते हैं और पहुँच 'aVar.FirstValue', परिणाम 'अनिर्धारित' है

तो इसका मतलब यह है कि मैं की तरह परीक्षण नहीं कर सकता साथ: 'if aVar.testVal == FirstValue' (के लिए ReferenceError अयोग्य FirstValue)

या इस तरह: 'if aVar.testVal == aVar.FirstValue' (aVar.FirstValue अपरिभाषित है)

कोई भी इस के माध्यम से पहले किया गया? यह हालांकि, वस्तु है कि उदाहरण में QML से instantiated है, क्यूटी डॉक्स में प्रदान की जाती उदाहरण के साथ संघर्ष करने के लिए लगता है, इसलिए इस कारण ..

उत्तर

16

Enum मान केवल "ElementName.EnumValue" पहुँचा जा सकता है हो सकता है, नहीं "object.EnumValue"। तो, AVar.FirstValue काम नहीं करेगा; आपको इसके बजाय MyClass.FirstValue का उपयोग करने की आवश्यकता होगी (और ऐसा करने के लिए, आपको MyClass को qmlRegisterType() के साथ पंजीकृत करने की आवश्यकता होगी और फिर पंजीकृत मॉड्यूल आयात करें)।

इसके अलावा, enum मान स्ट्रिंग के रूप में वापस नहीं लौटे क्योंकि उन्हें पूर्णांक मान के रूप में परिभाषित किया गया है।

+0

आह, गोचा, धन्यवाद। – aidanok

संबंधित मुद्दे