1

列挙を反復しようとしています。

    class MyEnumClass : public QObject
    {
        Q_GADGET
        Q_ENUMS(MyEnum)

    public:
        enum MyEnum
        {
            a, b, c
        };

        MyEnumClass(QObject *parent = 0){}
    };

    void listAllItems()
    {    
        QMetaObject meta = MyEnumClass::staticMetaObject;
        int count =  meta.enumeratorCount();
        for (int i=0; i < count; ++i)
        {
           QMetaEnum m = meta.enumerator(i);
           QString x;
           MyEnumClass::MyEnum y;
           x = m.valueToKey(i);
           y = (MyEnumClass::MyEnum)m.value(i);
        }
    }    

ループをステップ実行すると、名前が x で値が y の列挙が表示されるはずです。

残念ながら、最初の値しか表示できず、count は常に 1 です。

上記のコードを理解するためにこの質問を調べましたが、列挙型を要求しましたが、問題は別のものである必要があります。 Qt: Q_OBJECT の enum の meta.enumeratorCount() によるメタデータがありません。なぜですか?

何が欠けていますか?

4

1 に答える 1

2

meta.enumeratorCount()登録された列挙型の数を返すように見えます。あなたの場合、1つしかありません。を呼び出して にQMetaEnum対応するものを取得したい。その後、 と を使用して、列挙型のキーを一覧表示できます。MyEnummeta.enumerator(0)QMetaEnum::keyCountQMetaEnum::key

于 2014-08-19T21:32:03.990 に答える