我正在开发一个项目,其中包含BOOST_SCOPED_ENUM
的枚举定义,如:
BOOST_SCOPED_ENUM_START(myEnum)
{
A = 0,
B
};
BOOST_SCOPED_ENUM_END;
现在我想使用Q_ENUMS
在QT中注册此枚举,并使用它定义Q_PROPERTY
,例如:
Q_ENUMS(myEnum)
Q_PROPERTY(myEnum myEnumVar READ getMyEnumVar WRITE setMyEnumVar)
这不起作用,我尝试在BOOST_SCOPED_ENUM()
和Q_ENUMS
定义上添加Q_PROPERTY
宏,但它也没有帮助。
使用BOOST_SCOPED_ENUM
Q_ENUMS
枚举的正确方法是什么?
答案 0 :(得分:2)
宏BOOST_SCOPED_ENUM_*
只是声明struct:
# define BOOST_SCOPED_ENUM_START(name) struct name { enum enum_t
# define BOOST_SCOPED_ENUM_END };
# define BOOST_SCOPED_ENUM(name) name::enum_t
所以你的枚举实际上是name::enum_t
。
Qt文档还说明了Q_ENUMS
:
如果要注册在另一个类中声明的枚举,则 枚举必须使用定义它的类的名称完全限定。 另外,定义枚举的类必须继承QObject 以及使用Q_ENUMS()声明枚举。
我认为将BOOST_SCOPED_ENUM_*
与Q_ENUMS
一起使用是不可能的,因为它会生成不继承QObject
的结构。