Я использую следующий код всякий раз, когда мне нужно, чтобы зарегистрировать тип в системе метаобъект 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) Есть ли какое-нибудь хорошее решение НЕ с участием моего уродливого костыля (а именно класса клерка)?