2015-02-11 81 views
3

我用下面的代碼,每當我需要註冊使用Qt元對象系統類型:在QApplication創建之前使用Qt metatype系統可以嗎?

的* .h文件

class MyClass 
{ 

    //..... 

    class MyType {.....}; 
    static const int metaType_MyType; 

    class MetaClerk 
    { 
    public: 
     MetaClerk(void); 
    }; 
    static const MetaClerk metaClerk; 

    //..... 

}; 
Q_DECLARE_METATYPE(MyClass::MyType) 
QDataStream &operator<<(QDataStream &stream, const MyClass::MyType &a); 
QDataStream &operator>>(QDataStream &stream, MyClass::MyType &a); 

* .cpp文件

//..... 
const int MyClass::metaType_MyType = qRegisterMetaType<MyClass::MyType>("MyClass::MyType"); 
MyClass::MetaClerk::MetaClerk() 
{ 
    qRegisterMetaTypeStreamOperators<MyClass::MyType>("MyClass::MyType"); 
} 
const MyClass::MetaClerk MyClass::metaClerk; 
//..... 

這樣,我的MyType註冊在main()函數甚至啓動之前以所有可能的方式。所以,問題是

1)整個Qt MetaObject系統是否需要QCoreApplication的一個實例?也許我的代碼通過巧合巧妙地工作?

2)有什麼好的解決方案不涉及我醜陋的柺杖(即職員類)?

回答

1

QCoreApplication負責爲Qt應用程序提供事件循環,處理應用程序的初始化和終止以及管理應用程序和系統設置。

創建像QWidget這樣的項目時,您絕對應該有一個QApplication的實例。但是在創建QCoreApplicationQApplication的實例之前,使用QMetaType類或使用qRegisterMetaType不會有任何問題。

相關問題