2012-07-13 69 views
2

我有我創建的QFlag。我想在QML中使用這個QFlag。具體來說,我希望能夠將一些標誌或者作爲參數傳遞給一個方法。如何在QML中使用QFlags?

我注意到QFlags在這裏不明確列爲QML支持的數據類型:http://doc.qt.nokia.com/4.7-snapshot/qtbinding.html#supported-data-types

哪些類型是否需要註冊或Q_MACROs我需要用它來啓用此功能?

的目標是有一個方法調用,我可以在QML使用看起來像這樣:

myObject.setFlag(MyFlagType.A | MyFlagType.C) 

我QFlag代碼:

#include <QFlags> 
#include <QObject> 
class ColorPickerStyle : public QObject { 
Q_OBJECT 
public: 
enum ColorPickerStyleFlag { 
    None 0x00, 
    MSOfficeColors = 0x01, 
    RGBSlider = 0x02, 
    ColorWheel = 0x04, 
    CustomColorSet = 0x08 
}; 
//Create ColorPickerStyle::Flags as a type 
Q_DECLARE_FLAGS(Flags, ColorPickerStyleFlag) 
//Register ColorPickerStyle::Flags with the meta-type system 
Q_FLAGS(Flags) 
Q_ENUMS(ColorPickerStyleFlag) 

ColorPickerStyle(); 
virtual ~ColorPickerStyle(); 
}; 

//Qt requires lots of macros 
Q_DECLARE_OPERATORS_FOR_FLAGS(ColorPickerStyle::Flags) 

回答

4

另外聲明

Q_ENUMS(ColorPickerStyleFlag) 

應足夠。枚舉是整數,所以or運算符也可以在沒有來自QML的Q_FLAGS聲明的情況下工作。

ColorPickerStyle類還需要Q_OBJECT宏,以便元對象編譯器能夠正常工作。

最後,您可以使用QML中的值作爲ColorPickerStyle.None,ColorPickerStyle.MSOfficeColors,...