我的项目包含一个链接到两个静态库的应用程序。每个库都声明Q_DECLARE_METATYPE< QUuid >,以便将QUuidQVariant一起使用,这会导致'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将在QStringQByteArray之间隐式转换,所以您可以混合使用toStringtoByteArray而没有任何问题。

07-27 13:18