如何避免重复声明Q_DECLARE_METATYPE <acommontype> </acommontype>

时间:2012-06-29 19:56:56

标签: c++ qt qvariant

我的项目包含一个链接到两个静态库的应用程序。每个库都声明Q_DECLARE_METATYPE< QUuid >,以便将QUuidQVariant一起使用,从而导致'redefinition of struct QMetaTypeId< QUuid >'错误。

在保持在不同项目中自己使用每个库的能力的同时,正确的方法是什么?

1 个答案:

答案 0 :(得分:4)

作为一种解决方法,您可以从需要它的实现文件中调用Q_DECLARE_METATYPE宏,而不是从头文件中调用它,或as the documentation suggests,从每个库中的私有标头调用它。

但是因为QUuid将其内容存储为QByteArray,而QVariant已经支持Q_DECLARE_METATYPE,因此您无需使用// QVariant variant; // QUuid uuid; variant = uuid.toByteArray(); uuid = variant.toByteArray(); 来执行此操作(从{Qt 4.8}开始只):

QString

或同样的事情,但效率稍低,variant = uuid.toString(); uuid = variant.toString(); (在Qt 4.8之前):

QVariant

由于QString会在QByteArraytoString之间隐式转换,因此您可以毫不费力地混合toByteArray和{{1}}。