2015-02-11 6 views
3

Я использую следующий код всякий раз, когда мне нужно, чтобы зарегистрировать тип в системе метаобъект Qt:Можно ли использовать систему метаданных Qt до создания QApplication?

* .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. Но не было бы проблем с использованием класса QMetaType или с использованием qRegisterMetaType перед созданием экземпляра QCoreApplication или QApplication.

 Смежные вопросы

  • Нет связанных вопросов^_^