如何在QML中使用QFlags?

4
我有一个QFlag,我想在QML中使用它。具体来说,我想能够将几个标志或在一起并将它们作为参数传递给方法。
我注意到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)
1个回答

4
此外,声明

Q_ENUMS(ColorPickerStyleFlag)

应该足够了。枚举是整数,所以或运算符也可以在没有来自QML的Q_FLAGS声明的情况下工作。

类ColorPickerStyle也需要Q_OBJECT宏,以使元对象编译器正确工作。

最后你可以在QML中使用ColorPickerStyle.None,ColorPickerStyle.MSOfficeColors等值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接