Mein Projekt besteht aus einer App, die auf zwei statische Bibliotheken verweist. Jede der Bibliotheken deklariert Q_DECLARE_METATYPE< QUuid >
, um QUuid
mit QVariant
zu verwenden, was zu einem 'redefinition of struct QMetaTypeId< QUuid >'
Fehler führt.
Was ist der richtige Weg, um dies zu tun, während Sie die Möglichkeit haben, jede Bibliothek für sich in verschiedenen Projekten zu verwenden?
Um dieses Problem zu umgehen, können Sie das Makro Q_DECLARE_METATYPE
aus den Implementierungsdateien aufrufen, die es benötigen, anstatt es aus den Header-Dateien aufzurufen, oder wie in der Dokumentation vorgeschlagen , rufe es aus privaten Headern in jeder Bibliothek auf.
Aber da QUuid
seinen Inhalt als QByteArray
speichert, was bereits von QVariant
unterstützt wird, müssen Sie dazu nicht Q_DECLARE_METATYPE
verwenden (nur ab Qt 4.8):
oder das gleiche, aber etwas weniger effizient, mit QString
(vor Qt 4.8):
Und da QVariant
implizit zwischen QString
und QByteArray
konvertiert, können Sie toString
und toByteArray
ohne Probleme mischen.