4

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)私の醜い松葉杖(つまり、クラーククラス)を含まない良い解決策はありますか?

4

1 に答える 1

2

QCoreApplicationQt アプリケーションにイベント ループを提供し、アプリケーションの初期化とファイナライズを処理し、アプリケーションとシステムの設定を管理します。

あなたのようなアイテムを作成するときQWidgetは、間違いなくのインスタンスが必要ですQApplicationQMetaTypeただし、クラスを使用したり、またはqRegisterMetaTypeのインスタンスを作成する前に使用したりすることに問題はありません。QCoreApplicationQApplication

于 2015-02-11T13:46:08.000 に答える