Q_ENUMS with BOOST_SCOPED_ENUM

Q_ENUMS with BOOST_SCOPED_ENUM

本文关键字:SCOPED ENUM BOOST with ENUMS      更新时间:2023-10-16

我正在研究一个项目,该项目具有与BOOST_SCOPED_ENUM的枚举定义,如:

BOOST_SCOPED_ENUM_START(myEnum)
{
    A = 0,
    B
};
BOOST_SCOPED_ENUM_END;

现在我想使用Q_ENUMS在QT中注册此enum并定义Q_PROPERTY,如:

Q_ENUMS(myEnum)

Q_PROPERTY(myEnum myEnumVar READ getMyEnumVar WRITE setMyEnumVar)

这是不工作,我尝试在Q_ENUMSQ_PROPERTY定义上添加BOOST_SCOPED_ENUM()宏,但它也没有帮助。

Q_ENUMS

注册BOOST_SCOPED_ENUM枚举的正确方法是什么?

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

所以你的enum实际上是name::enum_t。此外,qt文档还说明了Q_ENUMS:

如果要注册在另一个类中声明的enum,则使用Enum必须使用定义它的类的名称进行完全限定。此外,定义枚举的类必须继承QObject as以及使用Q_ENUMS()声明枚举。

我认为这是不可能使用BOOST_SCOPED_ENUM_*Q_ENUMS,因为它产生的结构,不继承QObject