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ドキュメントには次のように書かれていますQ_ENUMS

別のクラスで宣言されている列挙型を登録する場合は、列挙型を定義するクラスの名前で完全に修飾する必要があります。さらに、列挙型を定義するクラスは、QObjectを継承し、Q_ENUMS()を使用して列挙型を宣言する必要があります。

BOOST_SCOPED_ENUM_*で使用することは不可能だと思います。Q_ENUMS継承しない構造体を生成するからQObjectです。

于 2013-03-05T12:33:02.880 に答える