私のプロジェクトは、2 つの静的ライブラリにリンクするアプリで構成されています。各ライブラリはQ_DECLARE_METATYPE< QUuid >
、 を使用するために をQUuid
宣言しているためQVariant
、'redefinition of struct QMetaTypeId< QUuid >'
エラーが発生します。
異なるプロジェクトで各ライブラリを単独で使用する機能を維持しながら、これを行う正しい方法は何ですか?
回避策として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
暗黙的に変換されるため、とを問題なく混在させることができます 。QString
QByteArray
toString
toByteArray