Q_ENUMS与BOOST_SCOPED_ENUM

时间:2013-03-05 09:07:33

标签: c++ qt boost

我正在开发一个项目,其中包含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枚举的正确方法是什么?

1 个答案:

答案 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的结构。