szayat
szayat

Reputation: 463

How to avoid duplicate declarations of Q_DECLARE_METATYPE<aCommonType>

My project consists of an app that links to two static libraries. Each of the libraries declares Q_DECLARE_METATYPE< QUuid >, in order to use QUuid with QVariant, which leads to a 'redefinition of struct QMetaTypeId< QUuid >' error.

What is the correct way to go about this while keeping the ability to use each library on its own in different projects?

Upvotes: 8

Views: 3310

Answers (1)

alexisdm
alexisdm

Reputation: 29896

As a workaround you can call the Q_DECLARE_METATYPE macro from the implementation files that need it instead of calling it from the header files, or as the documentation suggests, call it from private headers in each library.

But because QUuid stores its content as a QByteArray which is already supported by QVariant, you don't need to use Q_DECLARE_METATYPE to do that (from Qt 4.8 only):

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

or the same thing, but a little less efficiently, with QString (before Qt 4.8):

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

And since QVariant will implicitly convert between QString and QByteArray, you can mix toString and toByteArray without any problem.

Upvotes: 4

Related Questions