So vermeiden Sie doppelte Deklarationen von Q_DECLARE_METATYPEaCommonType

8

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?

    
szayat 29.06.2012, 19:56
quelle

1 Antwort

4

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):

%Vor%

oder das gleiche, aber etwas weniger effizient, mit QString (vor Qt 4.8):

%Vor%

Und da QVariant implizit zwischen QString und QByteArray konvertiert, können Sie toString und toByteArray ohne Probleme mischen.

    
alexisdm 30.06.2012, 12:54
quelle

Tags und Links