2016-10-03 2 views
1

QML 파일에서 다른 헤더에서 오는 enum을 사용하고 싶습니다. 열거가 묶여 있기 때문에qmlRegisterType with Q_ENUM 및 typedef enum

C:\Qt\5.7\msvc2013\include\QtQml\qqml.h:244: error: C2838: 'staticMetaObject' : illegal qualified name in member declaration 

see reference to function template instantiation 'int qmlRegisterType<Test::Foobar>(const char *,int,int,const char *)' being compiled 

그것을인가 : Q_ENUM로 포장 한 후, 나는 그것이 qmlRegisterType와 함께 작동 할 수 없습니다 : MSVC 2013

class Test: public QObject 
{ 
    Q_OBJECT 

    typedef foo::bar Foobar; // bar is the enum, contained in a namespace foo 

    Q_ENUM(Foobar) 

    public: 
      static void declareQML() 
      { 
       qmlRegisterType<Foobar>("TestEnums", 1, 0, "Foobar"); 
      }; 
} 

을, 나는 다음과 같은 오류를 받고 있어요 네임 스페이스? 네임 스페이스와 enum (protobuf에 의해 생성됨)을 포함하는 파일을 수정할 수는 없습니다.

답변

1

qmlRegisterType()은 QML에서 사용할 형식을 등록하지만, 열거 형이 아닌 QObject 파생 형식입니다. 따라서 실제로는 Test을 등록해야하며 열거 형은 Q_ENUM 매크로로 처리해야합니다.

enum은 Qt 메타 시스템에서 처리 할 수 ​​있도록 QObject 파생 클래스의 일부 여야합니다. 나는 그것이 어떤 외부 enum을 위해 작동한다고 생각하지 않는다.

enum이 일반 클래스 인 경우 moc 처리를 위해 Q_GADGET으로 만들 수 있습니다. 그렇지 않으면 Test 본래의 열거 형을 복제 할 수 있습니다.

마지막으로 열거 형 이름과 값 은 QML로 작동하려면 대문자로 시작하는이어야합니다.