내가있는 나는 C++ QObject를에서 를 오는 열거 클래스 유형 인 특성을하고 싶습니다, 별도의 QML 파일에 위임 구성 요소를 가지고있다. 이것이 가능합니까?QML 구성 요소 열거 클래스 속성
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: error: 'staticMetaObject' is not a member of 'Card::InGameState' const char *className = T::staticMetaObject.className(); \
QObject가 아닌 enum 클래스는이 오류가 발생하는 이유입니다. Q_ENUM 매크로를 사용하면 MetaSystem에서 사용할 수 없습니까?
도와 주시겠습니까? enum 클래스를 삭제하고 enum으로 변경하고 qml의 int 속성을 사용할 수 있지만 C++ 11 기능을 사용하고 싶습니다.
qmlRegisterType<Card>("com.memorygame.card", 1, 0, "Card");
The enumeration type is a representation of a C++ enum type. It is not possible to refer to the enumeration type in QML itself; instead, the int or var types can be used when referring to enumeration values from QML code.
예를 들어,에서
그래서 당신이 열거To use a custom enumeration as a data type, its class must be registered and the enumeration must also be declared with Q_ENUM() to register it with Qt's meta object system.
InGameState
대신 클래스 Card
를 등록하는 데 필요한 documentation에 따르면
Hey Tarod! 도와 줘서 고마워! (실제로 Card 클래스를 등록하는 것은 실제 프로젝트에서 수행되었지만 원래 게시물을 언급하지 않아서 유감스럽게 생각합니다.) 정말 큰 도움은 QML이 내 원래의 enum 클래스의 사용자 정의 속성 유형을 가지지 않을 것이라고 지적하고있었습니다 (거짓) 아이디어. 수신 측에서 int 및 QVariant 매개 변수 유형을 각각 사용하여 신호 슬롯에 int 및 var를 사용할 수 있습니다. – speter
@speter 좋아요! 고마워. 해피 코딩 :) – Tarod