如何避免重复声明Q_DECLARE_METATYPE<aCommonType>



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

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

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

但是由于QUuid将其内容存储为QVariant已经支持的QByteArray,因此您无需使用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

相关内容

  • 没有找到相关文章

最新更新