I use following code whenever I need to register a type in Qt metaobject system:
*.h file
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 file
//.....
const int MyClass::metaType_MyType = qRegisterMetaType<MyClass::MyType>("MyClass::MyType");
MyClass::MetaClerk::MetaClerk()
{
qRegisterMetaTypeStreamOperators<MyClass::MyType>("MyClass::MyType");
}
const MyClass::MetaClerk MyClass::metaClerk;
//.....
This way I have MyType registered in all possible ways before the main() function even starts. So, the question is
1) Does the whole Qt MetaObject system need an instance of QCoreApplication? Maybe my code works by happy coincidence?
2) Is there any nice solution NOT involving my ugly crutch (namely the Clerk class)?