4

我有一个我创建的 QFlag。我想在 QML 中使用这个 QFlag。具体来说,我希望能够将几个标志组合在一起并将它们作为参数传递给方法。

我注意到 QFlags 没有在这里明确列为 QML 支持的数据类型:http ://doc.qt.nokia.com/4.7-snapshot/qtbinding.html#supported-data-types

我需要注册哪些类型或使用 Q_MACRO 来启用此功能?

目标是有一个可以在 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

1 回答 1

4

另外声明

Q_ENUMS(ColorPickerStyleFlag)

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

ColorPickerStyle 类也需要 Q_OBJECT 宏,这样元对象编译器才能正常工作。

最后,您可以将 QML 中的值用作 ColorPickerStyle.None、ColorPickerStyle.MSOfficeColors、...

于 2012-07-14T13:30:25.273 回答