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;
//.....
このようにして、main() 関数が開始される前に、可能なすべての方法で MyType を登録します。それで、質問は
1) Qt MetaObject システム全体で QCoreApplication のインスタンスが必要ですか? 私のコードは偶然にも機能するのでしょうか?
2)私の醜い松葉杖(つまり、クラーククラス)を含まない良い解決策はありますか?