8

私のプロジェクトは、2 つの静的ライブラリにリンクするアプリで構成されています。各ライブラリはQ_DECLARE_METATYPE< QUuid >、 を使用するために をQUuid宣言しているためQVariant'redefinition of struct QMetaTypeId< QUuid >'エラーが発生します。

異なるプロジェクトで各ライブラリを単独で使用する機能を維持しながら、これを行う正しい方法は何ですか?

4

1 に答える 1

4

回避策としてQ_DECLARE_METATYPE、ヘッダー ファイルから呼び出す代わりに、必要な実装ファイルからマクロを呼び出すことができます。または、ドキュメントが示唆するように、各ライブラリのプライベート ヘッダーからマクロを呼び出します。

しかし、QUuidはそのコンテンツをQByteArrayで既にサポートされているとして保存するため、それQVariantを行うために を使用Q_DECLARE_METATYPEする必要はありません (Qt 4.8 以降のみ):

// QVariant variant;
// QUuid uuid;
variant = uuid.toByteArray();
uuid = variant.toByteArray();

QStringまたは同じことですが、 (Qt 4.8より前)では少し効率が悪くなります:

variant = uuid.toString();
uuid = variant.toString();

また、は と の間でQVariant暗黙的に変換されるため、とを問題なく混在させることができます 。QStringQByteArraytoStringtoByteArray

于 2012-06-30T12:54:03.907 に答える