Auf dieser Seite

QMetaType Class

Die Klasse „QMetaType“ verwaltet benannte Typen im Metaobjektsystem. Mehr...

Header: #include <QMetaType>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

Hinweis: Alle Funktionen dieser Klasse sind threadsicher.

QMetaType-Vergleiche

KategorieVergleichbare Typen
GleichheitQMetaType

Öffentliche Typen

enum Type { Void, Bool, Int, UInt, Double, …, UnknownType }
enum TypeFlag { NeedsConstruction, NeedsCopyConstruction, NeedsMoveConstruction, NeedsDestruction, RelocatableType, …, IsConst }
flags TypeFlags

Öffentliche Funktionen

(since 6.0) QMetaType()
QMetaType(int typeId)
(since 6.0) qsizetype alignOf() const
(since 6.0) QPartialOrdering compare(const void *lhs, const void *rhs) const
void *construct(void *where, const void *copy = nullptr) const
void *create(const void *copy = nullptr) const
bool debugStream(QDebug &dbg, const void *rhs)
void destroy(void *data) const
void destruct(void *data) const
(since 6.0) bool equals(const void *lhs, const void *rhs) const
QMetaType::TypeFlags flags() const
(since 6.1) bool hasRegisteredDataStreamOperators() const
(since 6.0) bool hasRegisteredDebugStreamOperator() const
int id() const
(since 6.5) bool isCopyConstructible() const
(since 6.5) bool isDefaultConstructible() const
(since 6.5) bool isDestructible() const
bool isEqualityComparable() const
(since 6.5) bool isMoveConstructible() const
bool isOrdered() const
bool isRegistered() const
bool isValid() const
bool load(QDataStream &stream, void *data) const
const QMetaObject *metaObject() const
const char *name() const
(since 6.5) void registerType() const
bool save(QDataStream &stream, const void *data) const
qsizetype sizeOf() const
(since 6.6) QMetaType underlyingType() const

Statische öffentliche Mitglieder

bool canConvert(QMetaType fromType, QMetaType toType)
bool canView(QMetaType fromType, QMetaType toType)
bool convert(QMetaType fromType, const void *from, QMetaType toType, void *to)
QMetaType fromName(QByteArrayView typeName)
QMetaType fromType()
bool hasRegisteredConverterFunction(QMetaType fromType, QMetaType toType)
bool hasRegisteredConverterFunction()
bool hasRegisteredMutableViewFunction(QMetaType fromType, QMetaType toType)
(since 6.0) bool hasRegisteredMutableViewFunction()
bool isRegistered(int type)
bool registerConverter()
bool registerConverter(To (From::*function)() const)
bool registerConverter(To (From::*function)(bool *) const)
bool registerConverter(UnaryFunction function)
(since 6.0) bool registerMutableView(To (From::*function)())
(since 6.0) bool registerMutableView(UnaryFunction function)
(since 6.0) bool view(QMetaType fromType, void *from, QMetaType toType, void *to)
(since 6.4) size_t qHash(QMetaType key, size_t seed = 0)
int qMetaTypeId()
int qRegisterMetaType()
(since 6.5) int qRegisterMetaType(QMetaType meta)
bool operator!=(const QMetaType &lhs, const QMetaType &rhs)
(since 6.5) QDebug operator<<(QDebug d, QMetaType m)
bool operator==(const QMetaType &lhs, const QMetaType &rhs)

Makros

Ausführliche Beschreibung

Die Klasse dient als Hilfsmittel zum Marshalling von Typen in „ QVariant “ sowie bei Verbindungen von Signalen und Slots über Warteschlangen. Sie ordnet einem Typ einen Typnamen zu, sodass dieser zur Laufzeit dynamisch erstellt und zerstört werden kann.

Typnamen können mit QMetaType registriert werden, indem entweder ` qRegisterMetaType()` oder ` registerType()` verwendet wird. Eine Registrierung ist für die meisten Operationen nicht erforderlich; sie ist nur für Operationen notwendig, die versuchen, einen Typnamen in Zeichenfolgenform wieder in ein QMetaType-Objekt oder die ID des Typs aufzulösen. Dazu gehören einige Signal-Slot-Verbindungen im alten Stil unter Verwendung von ` QObject::connect()`, das Einlesen von Benutzertypen aus ` QDataStream ` bis ` QVariant` oder die Anbindung an andere Sprachen und IPC-Mechanismen wie QML, D-Bus, JavaScript usw.

Der folgende Code allokiert und destrukturiert eine Instanz von ` MyClass ` anhand ihres Namens, wofür ` MyClass ` zuvor registriert worden sein muss:

QMetaType type = QMetaType::fromName("MyClass");
if (type.isValid()) {
    void *myClassPtr = type.create();
    //...
    type.destroy(myClassPtr);
    myClassPtr = nullptr;
}

Wenn die Stream-Operatoren ` operator<<() ` und ` operator>>() ` auf ` QVariant `-Objekten funktionieren sollen, die benutzerdefinierte Typen speichern, muss der benutzerdefinierte Typ die Operatoren ` operator<<() ` und ` operator>>() ` bereitstellen.

Siehe auch Q_DECLARE_METATYPE(), QVariant::setValue(), QVariant::value() und QVariant::fromValue().

Dokumentation zu Mitgliedstypen

enum QMetaType::Type

Dies sind die von QMetaType unterstützten integrierten Typen:

KonstanteWertBeschreibung
QMetaType::Void43void
QMetaType::Bool1bool
QMetaType::Int2int
QMetaType::UInt3unsigned int
QMetaType::Double6double
QMetaType::QChar7QChar
QMetaType::QString10QString
QMetaType::QByteArray12QByteArray
QMetaType::Nullptr51std::nullptr_t
QMetaType::VoidStar31void *
QMetaType::Long32long
QMetaType::LongLong4LongLong
QMetaType::Short33short
QMetaType::Char34char
QMetaType::Char1656char16_t
QMetaType::Char3257char32_t
QMetaType::ULong35unsigned long
QMetaType::ULongLong5ULongLong
QMetaType::UShort36unsigned short
QMetaType::SChar40signed char
QMetaType::UChar37unsigned char
QMetaType::Float38float
QMetaType::Float1663qfloat16
QMetaType::QObjectStar39QObject *
QMetaType::QBitArray13QBitArray
QMetaType::QBitmap0x1009QBitmap
QMetaType::QBrush0x1002QBrush
QMetaType::QByteArrayList49QByteArrayList
QMetaType::QCborArray54QCborArray
QMetaType::QCborMap55QCborMap
QMetaType::QCborSimpleType52QCborSimpleType
QMetaType::QCborValue53QCborValue
QMetaType::QColor0x1003QColor
QMetaType::QColorSpace0x1017QColorSpace (eingeführt in Qt 5.15)
QMetaType::QCursor0x100aQCursor
QMetaType::QDate14QDate
QMetaType::QDateTime16QDateTime
QMetaType::QEasingCurve29QEasingCurve
QMetaType::QFont0x1000QFont
QMetaType::QIcon0x1005QIcon
QMetaType::QImage0x1006QImage
QMetaType::QJsonArray47QJsonArray
QMetaType::QJsonDocument48QJsonDocument
QMetaType::QJsonObject46QJsonObject
QMetaType::QJsonValue45QJsonValue
QMetaType::QKeySequence0x100bQKeySequence
QMetaType::QLine23QLine
QMetaType::QLineF24QLineF
QMetaType::QLocale18QLocale
QMetaType::QMatrix4x40x1011QMatrix4x4
QMetaType::QModelIndex42QModelIndex
QMetaType::QPalette0x1004QPalette
QMetaType::QPen0x100cQPen
QMetaType::QPersistentModelIndex50QPersistentModelIndex (eingeführt in Qt 5.5)
QMetaType::QPixmap0x1001QPixmap
QMetaType::QPoint25QPoint
QMetaType::QPointF26QPointF
QMetaType::QPolygon0x1007QPolygon
QMetaType::QPolygonF0x1016QPolygonF
QMetaType::QQuaternion0x1015QQuaternion
QMetaType::QRect19QRect
QMetaType::QRectF20QRectF
QMetaType::QRegion0x1008QRegion
QMetaType::QRegularExpression44QRegularExpression
QMetaType::QSize21QSize
QMetaType::QSizeF22QSizeF
QMetaType::QSizePolicy0x2000QSizePolicy
QMetaType::QStringList11QStringList
QMetaType::QTextFormat0x100eQTextFormat
QMetaType::QTextLength0x100dQTextLength
QMetaType::QTime15QTime
QMetaType::QTransform0x1010QTransform
QMetaType::QUrl17QUrl
QMetaType::QUuid30QUuid
QMetaType::QVariant41QVariant
QMetaType::QVariantHash28QVariantHash
QMetaType::QVariantList9QVariantList
QMetaType::QVariantMap8QVariantMap
QMetaType::QVariantPair58QVariantPair
QMetaType::QVector2D0x1012QVektor2D
QMetaType::QVector3D0x1013QVector3D
QMetaType::QVector4D0x1014QVector4D
QMetaType::User65536Basiswert für Benutzertypen
QMetaType::UnknownType0Dies ist eine ungültige Typ-ID. Sie wird von ` QMetaType ` für nicht registrierte Typen zurückgegeben

Weitere Typen können mit ` qRegisterMetaType()` oder durch Aufruf von ` registerType()` registriert werden.

Siehe auch type().

enum QMetaType::TypeFlag
flags QMetaType::TypeFlags

Die Enumeration beschreibt Attribute eines Typs, der von QMetaType unterstützt wird.

KonstanteWertBeschreibung
QMetaType::NeedsConstruction0x1Dieser Typ verfügt über einen Standardkonstruktor. Ist das Flag nicht gesetzt, können Instanzen sicher mit `memset` auf 0 initialisiert werden.
QMetaType::NeedsCopyConstruction (since Qt 6.5)0x4000Dieser Typ verfügt über einen nicht-trivialen Kopierkonstruktor. Ist das Flag nicht gesetzt, können Instanzen mit `memcpy` kopiert werden.
QMetaType::NeedsMoveConstruction (since Qt 6.5)0x8000Dieser Typ verfügt über einen nicht-trivialen Move-Konstruktor. Ist das Flag nicht gesetzt, können Instanzen mit `memcpy` verschoben werden.
QMetaType::NeedsDestruction0x2Dieser Typ verfügt über einen nicht-trivialen Destruktor. Ist das Flag nicht gesetzt, ist vor dem Verwerfen von Objekten kein Aufruf des Destruktors erforderlich.
QMetaType::RelocatableType0x4Eine Instanz eines Typs mit diesem Attribut kann mithilfe von `memcpy` sicher an einen anderen Speicherort verschoben werden.
QMetaType::IsEnumeration0x10Dieser Typ ist eine Aufzählung.
QMetaType::IsUnsignedEnumeration0x100Wenn der Typ eine Aufzählung ist, ist sein zugrunde liegender Typ vorzeichenlos.
QMetaType::PointerToQObject0x8Dieser Typ ist ein Zeiger auf eine Klasse, die von „ QObject “ abgeleitet ist.
QMetaType::IsPointer0x800Dieser Typ ist ein Zeiger auf einen anderen Typ.
QMetaType::IsConst0x2000Gibt an, dass Werte dieses Typs unveränderlich sind; beispielsweise, weil es sich um Zeiger auf const-Objekte handelt.

Hinweis: Vor Qt 6.5 wurden sowohl das „NeedsConstruction“- als auch das „NeedsDestruction“-Flag fälschlicherweise gesetzt, wenn entweder der Kopierkonstruktor oder der Destruktor nicht trivial war (d. h., wenn der Typ nicht trivial war).

Beachten Sie, dass die „Needs“-Flags zwar gesetzt sein können, der Metatyp jedoch möglicherweise keinen öffentlich zugänglichen Konstruktor des entsprechenden Typs oder keinen öffentlich zugänglichen Destruktor besitzt.

Der Typ `TypeFlags` ist ein `typedef` für ` QFlags<TypeFlag>`. Er speichert eine ODER-Kombination von `TypeFlag`-Werten.

Dokumentation der Mitgliedsfunktionen

[constexpr noexcept default, since 6.0] QMetaType::QMetaType()

Erstellt ein standardmäßiges, ungültiges QMetaType-Objekt.

Diese Funktion wurde in Qt 6.0 eingeführt.

[explicit] QMetaType::QMetaType(int typeId)

Erstellt ein QMetaType-Objekt, das alle Informationen zum Typ „ typeId “ enthält.

[constexpr, since 6.0] qsizetype QMetaType::alignOf() const

Gibt die Ausrichtung des Typs in Bytes zurück (d. h. `alignof(T)`, wobei `T` der tatsächliche Typ ist, für den diese ` QMetaType `-Instanz erstellt wurde).

Diese Funktion wird typischerweise zusammen mit ` construct()` verwendet, um die Speicherverwaltung eines Typs auf niedriger Ebene durchzuführen.

Diese Funktion wurde in Qt 6.0 eingeführt.

Siehe auch „ QMetaType::construct()“ und „ QMetaType::sizeOf()“.

[static] bool QMetaType::canConvert(QMetaType fromType, QMetaType toType)

Gibt „ true “ zurück, wenn „ QMetaType::convert “ die Konvertierung von „ fromType “ nach „ toType “ durchführen kann. Beachten Sie, dass es hierbei hauptsächlich um die Möglichkeit zur Durchführung der Konvertierung geht, während die eigentliche Konvertierung beim Versuch fehlschlagen kann (beispielsweise bei der Konvertierung eines Gleitkommawerts in eine Ganzzahl außerhalb ihres Bereichs).

Die Funktion ` registerConverter()` kann verwendet werden, um zusätzliche Konvertierungen zu registrieren, entweder zwischen einem integrierten und einem nicht integrierten Typ oder zwischen zwei nicht integrierten Typen. Diese Funktion gibt ` true ` zurück, wenn der Konvertierungspfad registriert ist.

Die folgenden Konvertierungen werden von Qt unterstützt:

TypAutomatisch umgewandelt in
QMetaType::BoolQMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt, QMetaType::ULongLong
QMetaType::QByteArrayQMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt, QMetaType::ULongLong, QMetaType::QUuid
QMetaType::QCharQMetaType::Bool, QMetaType::Int, QMetaType::UInt, QMetaType::LongLong, QMetaType::ULongLong
QMetaType::QColorQMetaType::QString
QMetaType::QDateQMetaType::QDateTime, QMetaType::QString
QMetaType::QDateTimeQMetaType::QDate, QMetaType::QString, QMetaType::QTime
QMetaType::DoubleQMetaType::Bool, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt, QMetaType::ULongLong
QMetaType::QFontQMetaType::QString
QMetaType::IntQMetaType::Bool, QMetaType::QChar, QMetaType::Double, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt, QMetaType::ULongLong
QMetaType::QKeySequenceQMetaType::Int, QMetaType::QString
QMetaType::QVariantListQMetaType::QStringList (sofern die Elemente der Liste in QStrings konvertiert werden können)
QMetaType::LongLongQMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::QString, QMetaType::UInt, QMetaType::ULongLong
QMetaType::QPointQMetaType::QPointF
QMetaType::QRectQMetaType::QRectF
QMetaType::QStringQMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::QColor, QMetaType::QDate, QMetaType::QDateTime, QMetaType::Double, QMetaType::QFont, QMetaType::Int, QMetaType::QKeySequence, QMetaType::LongLong, QMetaType::QStringList, QMetaType::QTime, QMetaType::UInt, QMetaType::ULongLong, QMetaType::QUuid
QMetaType::QStringListQMetaType::QVariantList, QMetaType::QString (wenn die Liste genau einen Eintrag enthält)
QMetaType::QTimeQMetaType::QString
QMetaType::UIntQMetaType::Bool, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::ULongLong
QMetaType::ULongLongQMetaType::Bool, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt
QMetaType::QUuidQMetaType::QByteArray, QMetaType::QString

Zu den weiteren unterstützten Konvertierungen gehören solche zwischen allen primitiven Typen (int, float, bool usw., einschließlich aller Enumerationen) sowie zwischen beliebigen Zeigertypen und std::nullptr_t. Enumerationen können zudem in QString und QByteArray konvertiert werden.

Wenn sowohl ` fromType ` als auch ` toType ` Typen sind, die von ` QObject ` abgeleitet sind (oder Zeiger darauf), gibt diese Funktion ebenfalls ` true ` zurück, sofern einer der Typen vom anderen abgeleitet ist. Das heißt, sie gibt `true` zurück, wenn ein ` static_cast<> ` vom durch ` fromType ` beschriebenen Typ zum durch ` toType ` beschriebenen Typ kompilierbar wäre. Die Funktion ` convert()` funktioniert wie ` qobject_cast()` und überprüft den dynamischen Typ des Objekts, auf das der ` QVariant` zeigt.

Ein Typumwandlung aus einem sequenziellen Container liefert für diese Funktion ebenfalls „true“, wenn der toType der QVariantList ist.

Ebenso liefert ein Typumwandlung aus einem assoziativen Container für diese Funktion den Wert „true“, wenn der „ toType “ entweder „ QVariantHash “ oder „ QVariantMap “ ist.

Siehe auch „ convert()“, „ QMetaSequence::Iterable “, „ Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE()“, „ QMetaAssociation::Iterable “ und „ Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE()“.

[static] bool QMetaType::canView(QMetaType fromType, QMetaType toType)

Gibt „ true “ zurück, wenn „ QMetaType::view “ eine veränderbare Ansicht vom Typ „ toType “ für den Typ „ fromType “ erstellen kann.

Die Konvertierung zwischen Zeigern von Typen, die von QObject abgeleitet sind, gibt für diese Funktion „true“ zurück, wenn eine qobject_cast vom durch fromType beschriebenen Typ zum durch toType beschriebenen Typ erfolgreich wäre.

Sie können eine veränderbare Ansicht vom Typ „ QMetaSequence::Iterable “ für jeden Container erstellen, der mit „ Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE()“ registriert wurde.

Ebenso können Sie eine veränderbare Ansicht vom Typ QMetaAssociation::Iterable für jeden Container erstellen, der bei Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE() registriert ist.

Siehe auch convert(), QMetaSequence::Iterable, Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(), QMetaAssociation::Iterable sowie Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE().

[since 6.0] QPartialOrdering QMetaType::compare(const void *lhs, const void *rhs) const

Vergleicht die Objekte unter lhs und rhs hinsichtlich ihrer Reihenfolge.

Gibt „ QPartialOrdering::Unordered “ zurück, wenn der Vergleich nicht unterstützt wird oder die Werte ungeordnet sind. Andernfalls gibt die Funktion „ QPartialOrdering::Less “, „ QPartialOrdering::Equivalent “ oder „ QPartialOrdering::Greater “ zurück, wenn „ lhs “ kleiner als, gleich oder größer als „ rhs “ ist.

Beide Objekte müssen von dem durch diesen Metatyp beschriebenen Typ sein. Wenn entweder lhs oder rhs den Wert nullptr hat, sind die Werte ungeordnet. Ein Vergleich wird nur unterstützt, wenn der „kleiner als“-Operator des Typs für die Metatyp-Deklaration sichtbar war.

War auch der Gleichheitsoperator des Typs sichtbar, gelten Werte nur dann als gleich, wenn der Gleichheitsoperator dies angibt. Fehlt ein Gleichheitsoperator und ist keiner der Werte kleiner als der andere, gelten die Werte als gleich; ist ein Gleichheitsoperator vorhanden und sind zwei solche Werte nicht gleich, gelten sie als ungeordnet, genau wie NaN-Werte (Not a Number) eines Gleitkomma-Typs, die außerhalb seiner Ordnung liegen.

Hinweis: Wenn in der Metatyp-Deklaration kein „kleiner als“-Operator sichtbar war, sind die Werte ungeordnet, selbst wenn ein für die Deklaration sichtbarer Gleichheitsoperator sie als gleich betrachtet: „ compare() == 0 “ stimmt nur dann mit „ equals()“ überein, wenn der „kleiner als“-Operator sichtbar war.

Diese Funktion wurde in Qt 6.0 eingeführt.

Siehe auch equals() und isOrdered().

void *QMetaType::construct(void *where, const void *copy = nullptr) const

Erstellt einen Wert des Typs, für den diese ` QMetaType `-Instanz erstellt wurde, im vorhandenen Speicher, auf den ` where` verweist – das heißt, eine Kopie von ` copy` – und gibt ` where` zurück. Ist ` copy ` gleich Null, wird der Wert standardmäßig initialisiert.

Dies ist eine Low-Level-Funktion zur expliziten Verwaltung des Speichers, der zum Speichern des Typs verwendet wird. Ziehen Sie den Aufruf von ` create()` in Betracht, wenn Sie diese Ebene der Kontrolle nicht benötigen (d. h., verwenden Sie „new“ anstelle von „placement new“).

Sie müssen sicherstellen, dass where auf einen Speicherort verweist, an dem der neue Wert gespeichert werden kann, und dass where entsprechend ausgerichtet ist. Die Größe des Typs kann durch Aufruf von sizeOf() abgefragt werden.

Als Faustregel für die Ausrichtung gilt, dass ein Typ an seiner natürlichen Grenze ausgerichtet wird, d. h. an der kleinsten Potenz von 2, die größer ist als der Typ selbst, es sei denn, diese Ausrichtung ist größer als die maximale nutzbare Ausrichtung für die Plattform. In der Praxis ist ein Ausrichtungswert, der größer als 2 * sizeof(void*) ist, nur für spezielle Hardware-Befehle erforderlich (z. B. ausgerichtete SSE-Lade- und Speicherbefehle auf x86).

[static] bool QMetaType::convert(QMetaType fromType, const void *from, QMetaType toType, void *to)

Konvertiert das Objekt unter from von fromType in den vorab zugewiesenen Speicherbereich unter to vom Typ toType. Gibt true zurück, wenn die Konvertierung erfolgreich war, andernfalls false.

Sowohl ` from ` als auch ` to ` müssen gültige Zeiger sein.

void *QMetaType::create(const void *copy = nullptr) const

Gibt eine Kopie von ` copy` zurück, vorausgesetzt, es handelt sich um den Typ, für den diese ` QMetaType `-Instanz erstellt wurde. Wenn ` copy ` gleich ` nullptr` ist, wird eine Instanz mit Standardkonstruktion erstellt.

Siehe auch ` QMetaType::destroy()`.

bool QMetaType::debugStream(QDebug &dbg, const void *rhs)

Leitet das Objekt unter rhs in den Debug-Stream dbg weiter. Gibt bei Erfolg true zurück, andernfalls false.

void QMetaType::destroy(void *data) const

Löscht die ` data`, vorausgesetzt, es handelt sich um den Typ, für den diese ` QMetaType `-Instanz erstellt wurde.

Siehe auch QMetaType::create().

void QMetaType::destruct(void *data) const

Löscht den Wert unter data, vorausgesetzt, er ist vom Typ, für den diese QMetaType -Instanz erstellt wurde.

Im Gegensatz zu ` destroy()` ruft diese Funktion nur den Destruktor des Typs auf, nicht jedoch den `delete`-Operator.

Siehe auch ` QMetaType::construct()`.

[since 6.0] bool QMetaType::equals(const void *lhs, const void *rhs) const

Vergleicht die Objekte unter lhs und rhs auf Gleichheit.

Beide Objekte müssen von dem durch diesen Metatyp beschriebenen Typ sein. Die beiden Objekte können nur verglichen werden, wenn ein „kleiner als“- oder Gleichheitsoperator für den Typ in der Metatyp-Deklaration sichtbar war. Andernfalls betrachtet der Metatyp die Werte niemals als gleich. War ein Gleichheitsoperator für die Metatyp-Deklaration sichtbar, ist dieser maßgebend; andernfalls, wenn der „kleiner-als“-Operator sichtbar ist und keiner der Werte kleiner als der andere ist, werden die beiden als gleich angesehen. Sind die Werte ungeordnet (siehe compare() für Details), sind sie nicht gleich.

Gibt „true“ zurück, wenn die beiden Objekte gleich sind, andernfalls „false“.

Diese Funktion wurde in Qt 6.0 eingeführt.

Siehe auch isEqualityComparable() und compare().

[constexpr] QMetaType::TypeFlags QMetaType::flags() const

Gibt Flags des Typs zurück, für den diese Instanz von ` QMetaType ` erstellt wurde. Um bestimmte Typmerkmale zu überprüfen, sollten Sie lieber eine der „is-“Funktionen verwenden, anstatt direkt auf die Flags zurückzugreifen.

Siehe auch QMetaType::TypeFlags, isDefaultConstructible(), isCopyConstructible(), isMoveConstructible(), isDestructible(), isEqualityComparable() und isOrdered().

[static] QMetaType QMetaType::fromName(QByteArrayView typeName)

Gibt ein ` QMetaType ` zurück, das mit ` typeName` übereinstimmt. Das zurückgegebene Objekt ist ungültig, wenn der `typeName` nicht bekannt ist. QMetaType

[static constexpr] template <typename T> QMetaType QMetaType::fromType()

Gibt das „ QMetaType “ zurück, das dem Typ im Vorlagenparameter entspricht.

[static] bool QMetaType::hasRegisteredConverterFunction(QMetaType fromType, QMetaType toType)

Gibt „ true “ zurück, wenn das Metatyp-System eine registrierte Konvertierung von der Metatyp-ID „ fromType “ zu toType

[static] template <typename From, typename To> bool QMetaType::hasRegisteredConverterFunction()

Gibt „ true “ zurück, wenn das Metatyp-System eine registrierte Konvertierung vom Typ „From“ zum Typ „To“ enthält.

Dies ist eine überladene Funktion.

[since 6.1] bool QMetaType::hasRegisteredDataStreamOperators() const

Gibt „ true “ zurück, wenn das Metatyp-System Datenstromoperatoren für diesen Metatyp registriert hat.

Diese Funktion wurde in Qt 6.1 eingeführt.

[since 6.0] bool QMetaType::hasRegisteredDebugStreamOperator() const

Gibt „ true “ zurück, wenn das Metatyp-System einen registrierten Debug-Stream-Operator für diesen Metatyp besitzt.

Diese Funktion wurde in Qt 6.0 eingeführt.

[static] bool QMetaType::hasRegisteredMutableViewFunction(QMetaType fromType, QMetaType toType)

Gibt „ true “ zurück, wenn das Metatyp-System eine registrierte veränderbare Ansicht mit der Metatyp-ID „ fromType “ des Metatyps mit der ID „ toType “ enthält.

[static, since 6.0] template <typename From, typename To> bool QMetaType::hasRegisteredMutableViewFunction()

Gibt „ true “ zurück, wenn das Metatyp-System eine registrierte veränderbare Ansicht vom Typ „From“ auf dem Typ „To“ besitzt.

Dies ist eine überladene Funktion.

Diese Funktion wurde in Qt 6.0 eingeführt.

int QMetaType::id() const

Gibt den ID-Typ zurück, den diese „ QMetaType “-Instanz enthält.

[noexcept, since 6.5] bool QMetaType::isCopyConstructible() const

Gibt „true“ zurück, wenn dieser Typ per Kopierkonstruktion instanziiert werden kann. Ist dies der Fall, können die Funktionen „ construct()“ und „ create()“ mit einem nicht-null-Wert für den Parameter „ copy “ verwendet werden.

Diese Funktion wurde in Qt 6.5 eingeführt.

Siehe auch ` flags()`, ` isDefaultConstructible()`, ` isMoveConstructible()` und ` isDestructible()`.

[noexcept, since 6.5] bool QMetaType::isDefaultConstructible() const

Gibt „true“ zurück, wenn dieser Typ per Standardkonstruktion initialisiert werden kann. Ist dies der Fall, können die Funktionen „ construct()“ und „ create()“ mit einem Parameter „ copy “ verwendet werden, dessen Wert „null“ ist.

Diese Funktion wurde in Qt 6.5 eingeführt.

Siehe auch flags(), isCopyConstructible(), isMoveConstructible() und isDestructible().

[noexcept, since 6.5] bool QMetaType::isDestructible() const

Gibt „true“ zurück, wenn dieser Typ zerstört werden kann. Ist dies der Fall, können die Funktionen „ destroy()“ und „ destruct()“ aufgerufen werden.

Diese Funktion wurde in Qt 6.5 eingeführt.

Siehe auch flags(), isDefaultConstructible(), isCopyConstructible() und isMoveConstructible().

bool QMetaType::isEqualityComparable() const

Gibt „ true “ zurück, wenn ein „kleiner als“- oder Gleichheitsoperator für den durch diesen Metatyp beschriebenen Typ in der Metatyp-Deklaration sichtbar war; andernfalls „ false “.

Siehe auch „ equals()“ und „ isOrdered()“.

[noexcept, since 6.5] bool QMetaType::isMoveConstructible() const

Gibt „true“ zurück, wenn dieser Typ per Move-Konstruktion instanziiert werden kann. „ QMetaType “ verfügt derzeit nicht über eine API, um dieses Merkmal zu nutzen.

Diese Funktion wurde in Qt 6.5 eingeführt.

Siehe auch flags(), isDefaultConstructible(), isCopyConstructible() und isDestructible().

bool QMetaType::isOrdered() const

Gibt „ true “ zurück, wenn ein „kleiner als“-Operator für den durch diesen Metatyp beschriebenen Typ in der Metatyp-Deklaration sichtbar war; andernfalls „ false “.

Siehe auch „ compare()“ und „ isEqualityComparable()“.

[noexcept] bool QMetaType::isRegistered() const

Gibt „ true “ zurück, wenn dieses „ QMetaType “-Objekt in der globalen Metatyp-Registrierung von Qt registriert wurde. Durch die Registrierung kann der Typ anhand seines Namens (mit „ QMetaType::fromName()“) oder anhand seiner ID (mit dem Konstruktor) gefunden werden.

Siehe auch qRegisterMetaType() und isValid().

[static] bool QMetaType::isRegistered(int type)

Gibt „ true “ zurück, wenn der Datentyp mit der ID „ type “ registriert ist; andernfalls wird „ false “ zurückgegeben.

Siehe auch type() und Type.

[constexpr noexcept] bool QMetaType::isValid() const

Gibt „ true “ zurück, wenn dieses „ QMetaType “-Objekt gültige Informationen zu einem Typ enthält, andernfalls „false“.

Siehe auch ` isRegistered()`.

bool QMetaType::load(QDataStream &stream, void *data) const

Liest das Objekt dieses Typs aus der angegebenen Datei „ stream “ in die Datei „ data “ ein. Gibt „ true “ zurück, wenn das Objekt erfolgreich geladen wurde; andernfalls wird „ false “ zurückgegeben.

Normalerweise sollten Sie diese Funktion nicht direkt aufrufen müssen. Verwenden Sie stattdessen die Methode ` operator>>()` von ` QVariant`, die auf `load()` zurückgreift, um benutzerdefinierte Typen zu laden.

Siehe auch save().

[constexpr] const QMetaObject *QMetaType::metaObject() const

Gibt einen „ QMetaObject “ zurück, der diesem Typ zugeordnet ist.

Ist der Typ ein Zeigertyp auf eine Unterklasse von ` QObject`, enthält ` flags()` ` QMetaType::PointerToQObject ` und diese Funktion gibt das entsprechende ` QMetaObject` zurück. Dies kann in Kombination mit ` QMetaObject::newInstance()` verwendet werden, um `QObjects` dieses Typs zu erstellen.

Ist der Typ ein „ Q_GADGET “, enthält „ flags()“ „ QMetaType::IsGadget “. Ist der Typ ein Zeiger auf ein „ Q_GADGET “, enthält „ flags()“ „ QMetaType::PointerToGadget “. In beiden Fällen gibt diese Funktion ihren „ QMetaObject “ zurück. Dies kann verwendet werden, um „ QMetaMethod “ und „ QMetaProperty “ abzurufen und sie beispielsweise auf einen Zeiger dieses Typs anzuwenden, wie durch „ QVariant::data()“ vorgegeben.

Wenn es sich bei dem Typ um eine Aufzählung handelt, enthält ` flags()` ` QMetaType::IsEnumeration`. In diesem Fall gibt diese Funktion die ` QMetaObject ` des umschließenden Objekts zurück, wenn die Aufzählung als ` Q_ENUM ` registriert wurde, andernfalls ` nullptr `.

Siehe auch QMetaType::flags().

[constexpr] const char *QMetaType::name() const

Gibt den Typnamen zurück, der diesem ` QMetaType` zugeordnet ist, oder einen Nullzeiger, falls kein passender Typ gefunden wurde. Der zurückgegebene Zeiger darf nicht gelöscht werden.

Siehe auch ` typeName()`.

[static] template <typename From, typename To> bool QMetaType::registerConverter()

Registriert die Möglichkeit einer impliziten Konvertierung vom Typ „From“ zum Typ „To“ im Metatyp-System. Gibt „ true “ zurück, wenn die Registrierung erfolgreich war, andernfalls „false“.

class Counter {
  int number = 0;
public:
  int value() const { return number; }
  operator int() const { return value(); }
  void increment() {++number;}
};
QMetaType::registerConverter<Counter, int>();

[static] template <typename From, typename To> bool QMetaType::registerConverter(To (From::*function)() const)

Registriert eine Methode „ function “ wie „To From::function() const“ als Konverter vom Typ „From“ zum Typ „To“ im Metatyp-System. Gibt „ true “ zurück, wenn die Registrierung erfolgreich war, andernfalls „false“.

struct Coordinates {
  int x;
  int y;
  int z;

  QString toString() const { return u"[x: %1; y: %2, z: %3]"_s.arg(QString::number(x),
    QString::number(y),
    QString::number(z)); }
};
QMetaType::registerConverter<Coordinates, QString>(&Coordinates::toString);

Dies ist eine überladene Funktion.

[static] template <typename From, typename To> bool QMetaType::registerConverter(To (From::*function)(bool *) const)

Registriert eine Methode „ function “ wie „To From::function(bool *ok) const“ als Konverter vom Typ „From“ zum Typ „To“ im Metatyp-System. Gibt „ true “ zurück, wenn die Registrierung erfolgreich war, andernfalls „false“.

Der Zeiger ` ok ` kann von der Funktion verwendet werden, um anzugeben, ob die Konvertierung erfolgreich war.

struct BigNumber {
    long long l;

    int toInt(bool *ok = nullptr) const {
      const bool canConvertSafely = l < std::numeric_limits<int>::max();
      if (ok)
        *ok = canConvertSafely;
      return l;
    }
};
QMetaType::registerConverter<BigNumber, int>(&BigNumber::toInt);

Dies ist eine überladene Funktion.

[static] template < typename From, typename To, typename UnaryFunction > bool QMetaType::registerConverter(UnaryFunction function)

Registriert ein unäres Funktionsobjekt function als Konverter vom Typ „From“ zum Typ „To“ im Metatyp-System. Gibt true zurück, wenn die Registrierung erfolgreich war, andernfalls false.

function Muss eine Instanz vom Typ „ From “ entgegennehmen und eine Instanz vom Typ „ To “ zurückgeben. Es kann sich um einen Funktionszeiger, ein Lambda oder ein Funktor-Objekt handeln. Seit Qt 6.5 kann die Funktion „ function “ auch eine Instanz vom Typ „ std::optional<To> “ zurückgeben, um fehlgeschlagene Konvertierungen anzuzeigen.

QMetaType::registerConverter<CustomStringType, QString>([](const CustomStringType &str) {
    return QString::fromUtf8(str.data());
});
QMetaType::registerConverter<QJsonValue, CustomPointType>(
          [](const QJsonValue &value) -> std::optional<CustomPointType> {
    const auto object = value.toObject();
    if (!object.contains("x") || !object.contains("y"))
        return std::nullopt;  // The conversion fails if the required properties are missing
    return CustomPointType{object["x"].toDouble(), object["y"].toDouble()};
});

Dies ist eine überladene Funktion.

[static, since 6.0] template <typename From, typename To> bool QMetaType::registerMutableView(To (From::*function)())

Registriert eine Methode „ function “ wie „ To From::function() “ als veränderbare Ansicht vom Typ „ To “ auf dem Typ „ From “ im Metatyp-System. Gibt „ true “ zurück, wenn die Registrierung erfolgreich war, andernfalls „ false “.

Dies ist eine überladene Funktion.

Diese Funktion wurde in Qt 6.0 eingeführt.

[static, since 6.0] template < typename From, typename To, typename UnaryFunction > bool QMetaType::registerMutableView(UnaryFunction function)

Registriert ein unäres Funktionsobjekt „ function “ als veränderbare Ansicht vom Typ „To“ auf dem Typ „From“ im Metatyp-System. Gibt „ true “ zurück, wenn die Registrierung erfolgreich war, andernfalls „ false “.

Dies ist eine überladene Funktion.

Diese Funktion wurde in Qt 6.0 eingeführt.

[since 6.5] void QMetaType::registerType() const

Registriert diese „ QMetaType “ in der Typenregistrierung, sodass sie anhand ihres Namens über „ QMetaType::fromName()“ gefunden werden kann.

Diese Funktion wurde in Qt 6.5 eingeführt.

Siehe auch ` qRegisterMetaType()`.

bool QMetaType::save(QDataStream &stream, const void *data) const

Schreibt das Objekt, auf das data verweist, in die angegebene stream. Gibt true zurück, wenn das Objekt erfolgreich gespeichert wurde; andernfalls wird false zurückgegeben.

Normalerweise sollten Sie diese Funktion nicht direkt aufrufen müssen. Verwenden Sie stattdessen die Methode „ operator<<() “ von „ QVariant “, die sich auf „save()“ stützt, um benutzerdefinierte Typen zu streamen.

Siehe auch „ load()“.

[constexpr] qsizetype QMetaType::sizeOf() const

Gibt die Größe des Typs in Byte zurück (d. h. `sizeof(T)`, wobei `T` der tatsächliche Typ ist, für den diese ` QMetaType `-Instanz erstellt wurde).

Diese Funktion wird typischerweise zusammen mit ` construct()` verwendet, um die Speicherverwaltung eines Typs auf niedriger Ebene durchzuführen.

Siehe auch ` QMetaType::construct()` und ` QMetaType::alignOf()`.

[since 6.6] QMetaType QMetaType::underlyingType() const

Wenn dieser Metatyp eine Aufzählung darstellt, gibt diese Methode einen Metatyp einer numerischen Klasse zurück, deren Vorzeichen und Größe mit denen des zugrunde liegenden Typs der Aufzählung übereinstimmen. Wenn er einen Typ vom Typ „ QFlags “ darstellt, gibt er „ QMetaType::Int “ zurück. In allen anderen Fällen wird ein ungültiger „ QMetaType “ zurückgegeben.

Diese Funktion wurde in Qt 6.6 eingeführt.

[static, since 6.0] bool QMetaType::view(QMetaType fromType, void *from, QMetaType toType, void *to)

Erstellt eine veränderbare Ansicht des Objekts unter from von fromType im vorab zugewiesenen Speicherbereich unter to vom Typ toType. Gibt true zurück, wenn die Konvertierung erfolgreich war, andernfalls false.

Diese Funktion wurde in Qt 6.0 eingeführt.

Verwandte Nicht-Mitglieder

[since 6.4] size_t qHash(QMetaType key, size_t seed = 0)

Gibt den Hash-Wert für „ key “ zurück, wobei „ seed “ als Startwert für die Berechnung verwendet wird.

Diese Funktion wurde in Qt 6.4 eingeführt.

[constexpr] template <typename T> int qMetaTypeId()

Gibt zur Kompilierungszeit die Metatyp-ID des Typs „ T “ zurück. Wenn der Typ nicht mit „ Q_DECLARE_METATYPE()“ deklariert wurde, schlägt die Kompilierung fehl.

Typische Verwendung:

int id = qMetaTypeId<QString>();    // id is now QMetaType::QString
id = qMetaTypeId<MyStruct>();       // compile error if MyStruct not declared

QMetaType::type() gibt dieselbe ID wie qMetaTypeId() zurück, führt jedoch zur Laufzeit eine Suche anhand des Typnamens durch. QMetaType::type() ist etwas langsamer, die Kompilierung gelingt jedoch auch dann, wenn ein Typ nicht registriert ist.

Siehe auch „ Q_DECLARE_METATYPE()“ und „ QMetaType::type()“.

[constexpr] template <typename T> int qRegisterMetaType()

Rufen Sie diese Funktion auf, um den Typ „ T “ zu registrieren. Gibt die Metatyp-ID zurück.

Beispiel:

int id = qRegisterMetaType<MyStruct>();

Diese Funktion setzt voraus, dass „ T “ zum Zeitpunkt des Funktionsaufrufs ein vollständig definierter Typ ist. Bei Zeigertypen muss zudem der Typ, auf den der Zeiger verweist, vollständig definiert sein. Verwenden Sie „ Q_DECLARE_OPAQUE_POINTER()“, um Zeiger auf vorwärts deklarierte Typen registrieren zu können.

Um den Typ „ T “ in „ QMetaType “, „ QVariant “ oder mit der API „ QObject::property()“ zu verwenden, ist keine Registrierung erforderlich.

Um die Typ T e in Verbindungen mit Signalen und Slots in der Warteschlange zu verwenden, muss qRegisterMetaType<T>() aufgerufen werden, bevor die erste Verbindung hergestellt wird. Dies geschieht in der Regel im Konstruktor der Klasse, die T verwendet, oder in der Funktion main().

Nachdem ein Typ registriert wurde, kann er anhand seines Namens mit ` QMetaType::fromName()` abgerufen werden.

Siehe auch ` Q_DECLARE_METATYPE()`.

[since 6.5] int qRegisterMetaType(QMetaType meta)

Registriert den Metatyp „ meta “ und gibt dessen Typ-ID zurück.

Um einen Typ mit dem Metatyp ` meta ` in Queued-Signal- und Slot-Verbindungen zu verwenden, muss ` qRegisterMetaType(meta) ` aufgerufen werden, bevor die erste Verbindung hergestellt wird. Dies geschieht typischerweise im Konstruktor der Klasse, die den Metatyp verwendet, oder in der Funktion ` main() `.

Nachdem ein Typ registriert wurde, kann er über „ QMetaType::fromName()“ anhand seines Namens abgerufen werden.

Diese Funktion wurde in Qt 6.5 eingeführt.

[noexcept] bool operator!=(const QMetaType &lhs, const QMetaType &rhs)

Gibt „ true “ zurück, wenn „ QMetaType “ lhs einen anderen Typ darstellt als „ QMetaType “ rhs; andernfalls wird „ false “ zurückgegeben.

[since 6.5] QDebug operator<<(QDebug d, QMetaType m)

Schreibt die Datei „ QMetaType “ ( m ) in den Stream „ d “ und gibt den Stream zurück.

Diese Funktion wurde in Qt 6.5 eingeführt.

[noexcept] bool operator==(const QMetaType &lhs, const QMetaType &rhs)

Gibt „ true “ zurück, wenn „ QMetaType “ ( lhs ) denselben Typ wie „ QMetaType “ ( rhs) hat; andernfalls wird „ false “ zurückgegeben.

Makro-Dokumentation

Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE(Container)

Dieses Makro macht den Container „ Container “ für „ QMetaType “ als assoziativen Container erkennbar. Dadurch ist es möglich, eine Instanz von „Container<T, U>“ in einen „ QVariant “ einzufügen, sofern „T“ und „U“ selbst für „ QMetaType “ bekannt sind.

Beachten Sie, dass alle assoziativen Qt-Container bereits über eine integrierte Unterstützung verfügen und es nicht erforderlich ist, dieses Makro bei ihnen zu verwenden. Auch der Container `std::map` verfügt über eine integrierte Unterstützung.

Dieses Beispiel zeigt eine typische Verwendung von `Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE()`:

#include <unordered_map>

Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE(std::unordered_map)

void someFunction()
{
    std::unordered_map<int, bool> container;
    QVariant var = QVariant::fromValue(container);
    // ...
}

Q_DECLARE_METATYPE(Type)

Dieses Makro macht den Typ „ Type “ für „ QMetaType “ bekannt, sofern dieser einen öffentlichen Standardkonstruktor, einen öffentlichen Kopierkonstruktor und einen öffentlichen Destruktor bereitstellt. Es wird benötigt, um den Typ „ Type “ als benutzerdefinierten Typ in „ QVariant “ zu verwenden.

Dieses Makro setzt voraus, dass Type zum Zeitpunkt seiner Verwendung ein vollständig definierter Typ ist. Bei Zeigertypen muss zudem der Typ, auf den gezeigt wird, vollständig definiert sein. Verwenden Sie es in Verbindung mit Q_DECLARE_OPAQUE_POINTER(), um Zeiger auf vorwärtsdeklarierte Typen zu registrieren.

Idealerweise sollte dieses Makro unterhalb der Deklaration der Klasse oder Struktur platziert werden. Ist dies nicht möglich, kann es in eine private Header-Datei eingefügt werden, die jedes Mal eingebunden werden muss, wenn dieser Typ in einem ` QVariant` verwendet wird.

Durch das Hinzufügen von `Q_DECLARE_METATYPE()` wird der Typ allen vorlagengestützten Funktionen bekannt, einschließlich ` QVariant`. Beachten Sie, dass Sie, wenn Sie den Typ in queued Signal- und Slot-Verbindungen oder im Eigenschaftssystem von ` QObject` verwenden möchten, zusätzlich ` qRegisterMetaType()` aufrufen müssen, da die Namen zur Laufzeit aufgelöst werden.

Dieses Beispiel zeigt einen typischen Anwendungsfall von `Q_DECLARE_METATYPE()`:

struct MyStruct
{
    int i;
    //...
};

Q_DECLARE_METATYPE(MyStruct)

Befindet sich „ MyStruct “ in einem Namensraum, muss das Makro „Q_DECLARE_METATYPE()“ außerhalb des Namensraums stehen:

namespace MyNamespace
{
    struct MyStruct
    {
        //...
    };
}

Q_DECLARE_METATYPE(MyNamespace::MyStruct)

Da „ MyStruct “ nun von „ QMetaType “ erkannt wird, kann es in „ QVariant “ verwendet werden:

MyStruct s;
QVariant var;
var.setValue(s); // copy s into the variant

//...

// retrieve the value
MyStruct s2 = var.value<MyStruct>();

Einige Typen werden automatisch registriert und benötigen dieses Makro nicht:

Hinweis: Diese Methode registriert auch die Stream- und Debug-Operatoren für den Typ, sofern diese zum Zeitpunkt der Registrierung sichtbar sind. Da dies an einigen Stellen automatisch erfolgt, wird dringend empfohlen, die Stream-Operatoren für einen Typ direkt nach dem Typ selbst zu deklarieren. Aufgrund der argumentabhängigen Suchregeln von C++ wird außerdem dringend empfohlen, die Operatoren im selben Namensraum wie den Typ selbst zu deklarieren.

Die Stream-Operatoren sollten die folgenden Signaturen aufweisen:

QDataStream &operator<<(QDataStream &out, const MyClass &myObj);
QDataStream &operator>>(QDataStream &in, MyClass &myObj);

Siehe auch ` qRegisterMetaType()`.

Q_DECLARE_OPAQUE_POINTER(PointerType)

Dieses Makro ermöglicht es, Zeiger auf vorwärtsdeklarierte Typen (PointerType) mithilfe von Q_DECLARE_METATYPE() oder qRegisterMetaType() bei QMetaType zu registrieren.

Verwenden Sie dieses Makro nicht, um Warnungen oder Fehler von moc bezüglich unvollständiger Eigenschaftstypen zu vermeiden, wenn der Typ, auf den der Zeiger verweist, in anderen Kontexten des Programms als vollständiger Typ verwendet wird. Verwenden Sie stattdessen ` Q_MOC_INCLUDE `, wenn die vollständige Definition des Typs verfügbar ist, Sie jedoch eine Vorwärtsdeklaration im Header bevorzugen, um die Kompilierungszeiten zu verkürzen.

Warnung: Verwenden Sie `Q_DECLARE_OPAQUE_POINTER`nicht mit Zeigern auf eine ` Q_OBJECT `- oder eine Gadget-Klasse, da dies das Risiko birgt, inkonsistente Informationen in das Metatyp-System einzuführen.

Siehe auch ` Q_DECLARE_METATYPE()` und ` qRegisterMetaType()`.

Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(Container)

Dieses Makro macht den Container „ Container “ für „ QMetaType “ als sequenziellen Container erkennbar. Dadurch ist es möglich, eine Instanz von „Container<T>“ in einen „ QVariant “ zu verschieben, sofern „T“ selbst für „ QMetaType “ bekannt ist.

Beachten Sie, dass alle sequenziellen Qt-Container bereits über eine integrierte Unterstützung verfügen und es nicht notwendig ist, dieses Makro bei ihnen zu verwenden. Auch die Container `std::vector` und `std::list` verfügen über eine integrierte Unterstützung.

Dieses Beispiel zeigt eine typische Verwendung von `Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE()`:

#include <deque>

Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(std::deque)

void someFunc()
{
    std::deque<QFile*> container;
    QVariant var = QVariant::fromValue(container);
    // ...
}

Q_DECLARE_SMART_POINTER_METATYPE(SmartPointer)

Dieses Makro macht den Smart-Pointer ` SmartPointer ` für ` QMetaType ` als Smart-Pointer erkennbar. Dadurch ist es möglich, eine Instanz von `SmartPointer<T>` in einen ` QVariant` zu übergeben, sofern `T` ein Typ ist, der von ` QObject` erbt.

Beachten Sie, dass die QWeakPointer, QSharedPointer und QPointer bereits über eine integrierte Unterstützung verfügen und es nicht erforderlich ist, dieses Makro bei ihnen zu verwenden.

Dieses Beispiel zeigt eine typische Verwendung von `Q_DECLARE_SMART_POINTER_METATYPE()`:

#include <memory>

Q_DECLARE_SMART_POINTER_METATYPE(std::shared_ptr)

void someMethod()
{
    auto smart_ptr = std::make_shared<QFile>();
    QVariant var = QVariant::fromValue(smart_ptr);
    // ...
    if (var.canConvert<QObject*>()) {
        QObject*sp = var.value<QObject*>();
        qDebug() << sp->metaObject()->className(); // Prints 'QFile'.
    }
}

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.