4

別のqmlファイルにデリゲートコンポーネントがあり、c++ QObject から列挙型クラスタイプであるプロパティが必要です。これは可能ですか?

最小限の(非)作業例を次に示します。

card.h

#include <QObject>

class Card : public QObject
{
    Q_OBJECT
public:
    explicit Card(QObject *parent = 0);

    enum class InGameState {
        IDLE,
        FLIPPED,
        HIDDEN
    };
    Q_ENUM(InGameState)

private:
    InGameState mState;
};
Q_DECLARE_METATYPE(Card::InGameState)

main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "card.h"
int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    qmlRegisterType<Card::InGameState>("com.memorygame.ingamestate", 1, 0, "InGameState");
    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();
}

testcard.qml

import QtQuick 2.0
import com.memorygame.ingamestate 1.0

Item {
    property InGameState state

    Rectangle {
        id: dummy
        width: 10
    }
}

私が得るコンパイラエラー:

D:\Programs\Qt\Qt5.7.0\5.7\mingw53_32\include\QtQml\qqml.h:89: エラー: 'staticMetaObject' は 'Card::InGameState' のメンバーではありません const char *className = T::staticMetaObject 。クラス名(); \

enum クラスが QObject ではないため、このエラーが発生します。しかし、Q_ENUM マクロはそれを MetaSystem で使用できるようにすべきではありませんか?

これを手伝ってくれませんか?enum クラスを削除して enum に変更し、qml で int プロパティを使用することもできますが、c++11 の機能を使用したいと考えています。

4

1 に答える 1