Можно ли использовать систему метатипов Qt до создания QApplication?

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

* .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) Есть ли хорошее решение, НЕ включающее мой уродливый костыль (а именно класс Клерка)?

3

Решение

QCoreApplication отвечает за обеспечение цикла событий для приложений Qt, обработку инициализации и финализации приложения и управление настройками приложения и системы.

При создании таких предметов, как QWidget у вас обязательно должен быть экземпляр QApplication, Но не будет проблем с использованием QMetaType класс или использование qRegisterMetaType перед созданием экземпляра QCoreApplication или же QApplication,

1

Другие решения


По вопросам рекламы [email protected]