8

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

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

4

1 回答 1

4

作为一种解决方法,您可以Q_DECLARE_METATYPE从需要它的实现文件中调用宏,而不是从头文件中调用它,或者按照文档的建议,从每个库中的私有头文件中调用它。

但是因为QUuid将其内容存储QByteArray为 已经支持的a 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将在QStringand之间进行隐式转换QByteArray,因此您可以混合 toStringandtoByteArray没有任何问题。

于 2012-06-30T12:54:03.907 回答