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?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With