我的项目包含一个链接到两个静态库的应用程序。每个库都声明Q_DECLARE_METATYPE< QUuid >
,以便将QUuid
与QVariant
一起使用,这会导致'redefinition of struct QMetaTypeId< QUuid >'
错误。
在保持在不同项目中独立使用每个库的能力的同时,正确的方法是什么?
最佳答案
解决方法是,可以从需要它的实现文件中调用Q_DECLARE_METATYPE
宏,而不是从头文件或as the documentation suggests中调用它,而从每个库的私有(private)头中调用它。
但是因为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
而没有任何问题。