1

我正在开发一个具有以下枚举定义的项目BOOST_SCOPED_ENUM

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

现在我想在 QT 中注册这个枚举Q_ENUMS并用它定义Q_PROPERTY,比如:

Q_ENUMS(myEnum)

Q_PROPERTY(myEnum myEnumVar READ getMyEnumVar WRITE setMyEnumVar)

这不起作用,我尝试添加BOOST_SCOPED_ENUM()Q_ENUMSQ_PROPERTY定义,但它也没有帮助。

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

4

1 回答 1

2

BOOST_SCOPED_ENUM_*只是声明结构:

# 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-documentation还说以下关于Q_ENUMS

如果要注册在另一个类中声明的枚举,则该枚举必须完全限定为定义它的类的名称。此外,定义枚举的类必须继承 QObject并使用 Q_ENUMS() 声明枚举。

我认为不可能使用BOOST_SCOPED_ENUM_*with Q_ENUMS,因为它会生成不继承的 struct QObject

于 2013-03-05T12:33:02.880 回答