我有一个我创建的 QFlag。我想在 QML 中使用这个 QFlag。具体来说,我希望能够将几个标志组合在一起,并将它们作为参数传递给方法。
我注意到这里没有明确列出 QFlags 作为 QML 支持的数据类型:http://doc.qt.nokia.com/4.7-snapshot/qtbinding.html#supported-data-types 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)
另外声明
Q_ENUMS(ColorPickerStyleFlag)
应该足够了。枚举是整数,因此 or 运算符在没有 QML 的 Q_FLAGS 声明的情况下也可以工作。
ColorPickerStyle 类还需要 Q_OBJECT 宏,以便元对象编译器正常工作。
最后,您可以使用 QML 中的值作为 ColorPickerStyle.None、ColorPickerStyle.MSOfficeColors,...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)