QMetaType Class

Die Klasse QMetaType verwaltet benannte Typen im Meta-Objektsystem. Mehr...

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

Diese Klasse ist gleichwertig-vergleichbar.

Hinweis: Alle Funktionen in dieser Klasse sind thread-sicher.

Ö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::*)() const function)
bool registerConverter(To (From::*)(bool *) const function)
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

Detaillierte Beschreibung

Die Klasse wird als Hilfsklasse verwendet, um Typen in QVariant und in Warteschlangen-Signalen und Slot-Verbindungen zu marshallieren. Sie assoziiert einen Typnamen mit einem Typ, so dass dieser zur Laufzeit dynamisch erstellt und zerstört werden kann.

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

Der folgende Code weist eine Instanz von MyClass anhand ihres Namens zu und zerstört sie wieder, was voraussetzt, dass MyClass zuvor registriert wurde:

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

Wenn wir wollen, dass die Stream-Operatoren operator<<() und operator>>() auf QVariant Objekten funktionieren, 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 der Mitgliedstypen

enum QMetaType::Type

Dies sind die eingebauten Typen, die von QMetaType unterstützt werden:

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::QCursor0x100aQCursor
QMetaType::QDate14QDate
QMetaType::QSize21QSize
QMetaType::QTime15QTime
QMetaType::QVariantList9QVariantList
QMetaType::QPolygon0x1007QPolygon
QMetaType::QPolygonF0x1016QPolygonF
QMetaType::QColor0x1003QColor
QMetaType::QColorSpace0x1017QColorSpace (eingeführt in Qt 5.15)
QMetaType::QSizeF22QSizeF
QMetaType::QRectF20QRectF
QMetaType::QLine23QLine
QMetaType::QTextLength0x100dQTextLength
QMetaType::QStringList11QStringList
QMetaType::QVariantMap8QVariantMap
QMetaType::QVariantHash28QVariantHash
QMetaType::QVariantPair58QVariantPair
QMetaType::QIcon0x1005QIcon
QMetaType::QPen0x100cQPen
QMetaType::QLineF24QLineF
QMetaType::QTextFormat0x100eQTextFormat
QMetaType::QRect19QRect
QMetaType::QPoint25QPoint
QMetaType::QUrl17QUrl
QMetaType::QRegularExpression44QRegularAusdruck
QMetaType::QDateTime16QDateTime
QMetaType::QPointF26QPointF
QMetaType::QPalette0x1004QPalette
QMetaType::QFont0x1000QFont
QMetaType::QBrush0x1002QBrush
QMetaType::QRegion0x1008QRegion
QMetaType::QBitArray13QBitArray
QMetaType::QImage0x1006QImage
QMetaType::QKeySequence0x100bQKeySequence
QMetaType::QSizePolicy0x2000QSizePolicy
QMetaType::QPixmap0x1001QPixmap
QMetaType::QLocale18QLocale
QMetaType::QBitmap0x1009QBitmap
QMetaType::QTransform0x1010QTransform
QMetaType::QMatrix4x40x1011QMatrix4x4
QMetaType::QVector2D0x1012QVector2D
QMetaType::QVector3D0x1013QVektor3D
QMetaType::QVector4D0x1014QVektor4D
QMetaType::QQuaternion0x1015QQuaternion
QMetaType::QEasingCurve29QEasingCurve
QMetaType::QJsonValue45QJsonValue
QMetaType::QJsonObject46QJsonObject
QMetaType::QJsonArray47QJsonArray
QMetaType::QJsonDocument48QJsonDocument
QMetaType::QCborValue53QCborWert
QMetaType::QCborArray54QCborArray
QMetaType::QCborMap55QCborMap
QMetaType::QCborSimpleType52QCborSimpleType
QMetaType::QModelIndex42QModelIndex
QMetaType::QPersistentModelIndex50QPersistentModelIndex (eingeführt in Qt 5.5)
QMetaType::QUuid30QUuid
QMetaType::QByteArrayList49QByteArrayList
QMetaType::QVariant41QVariant
QMetaType::User65536Basiswert für Benutzertypen
QMetaType::UnknownType0Dies ist eine ungültige Typ-ID. Sie wird von QMetaType für Typen zurückgegeben, die nicht registriert sind.

Zusätzliche Typen können mit qRegisterMetaType() oder durch Aufruf von registerType() registriert werden.

Siehe auch type() und typeName().

enum QMetaType::TypeFlag
flags QMetaType::TypeFlags

Das Enum beschreibt Attribute eines Typs, die von QMetaType unterstützt werden.

KonstanteWertBeschreibung
QMetaType::NeedsConstruction0x1Dieser Typ hat einen Standardkonstruktor. Wenn das Flag nicht gesetzt ist, können Instanzen sicher mit memset auf 0 initialisiert werden.
QMetaType::NeedsCopyConstruction0x4000(seit 6.5) Dieser Typ hat einen nicht-trivialen Kopierkonstruktor. Wenn das Flag nicht gesetzt ist, können Instanzen mit memcpy kopiert werden.
QMetaType::NeedsMoveConstruction0x8000(seit 6.5) Dieser Typ hat einen nicht-trivialen move-Konstruktor. Wenn das Flag nicht gesetzt ist, können Instanzen mit memcpy verschoben werden.
QMetaType::NeedsDestruction0x2Dieser Typ hat einen nicht-trivialen Destruktor. Wenn das Flag nicht gesetzt ist, ist ein Aufruf des Destruktors nicht notwendig, bevor Objekte verworfen werden.
QMetaType::RelocatableType0x4Eine Instanz eines Typs mit diesem Attribut kann mit memcpy sicher an eine andere Speicherstelle verschoben werden.
QMetaType::IsEnumeration0x10Dieser Typ ist eine Aufzählung.
QMetaType::IsUnsignedEnumeration0x100Wenn der Typ eine Enumeration ist, ist der zugrunde liegende Typ unsigned.
QMetaType::PointerToQObject0x8Dieser Typ ist ein Zeiger auf eine von QObject abgeleitete Klasse.
QMetaType::IsPointer0x800Dieser Typ ist ein Zeiger auf einen anderen Typ.
QMetaType::IsConst0x2000Zeigt an, dass Werte dieses Typs unveränderlich sind, zum Beispiel weil sie Zeiger auf const-Objekte sind.

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

Beachten Sie, dass die Needs-Flags gesetzt sein können, aber der Meta-Typ keinen öffentlich zugänglichen Konstruktor des entsprechenden Typs oder einen öffentlich zugänglichen Destruktor haben darf.

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

Dokumentation der Mitgliedsfunktionen

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

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

Diese Funktion wurde in Qt 6.0 eingeführt.

[explicit] QMetaType::QMetaType(int typeId)

Konstruiert ein QMetaType-Objekt, das alle Informationen über den 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 eine Low-Level-Verwaltung des von einem Typ verwendeten Speichers 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 von fromType nach toType konvertieren kann.

Die folgenden Konvertierungen werden von Qt unterstützt:

TypAutomatisch umwandeln 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 (wenn die Elemente der Liste in QStrings umgewandelt 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

Casting zwischen primitiven Typen (int, float, bool usw.) wird unterstützt.

Die Konvertierung zwischen Zeigern von Typen, die von QObject abgeleitet sind, gibt für diese Funktion ebenfalls true zurück, wenn ein qobject_cast von dem durch fromType beschriebenen Typ zu dem durch toType beschriebenen Typ erfolgreich wäre.

Ein Cast aus einem sequentiellen Container gibt für diese Funktion ebenfalls true zurück, wenn der toType QVariantList ist.

In ähnlicher Weise wird ein Cast aus einem assoziativen Container für diese Funktion ebenfalls wahr, wenn toType QVariantHash oder QVariantMap ist.

Siehe auch convert(), QSequentialIterable, Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(), QAssociativeIterable, und Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE().

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

Gibt true zurück, wenn QMetaType::view eine veränderbare Sicht des Typs toType auf 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 von dem durch fromType beschriebenen Typ zu dem durch toType beschriebenen Typ erfolgreich wäre.

Sie können eine veränderbare Ansicht des Typs QSequentialIterable auf jedem mit Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE() registrierten Container erstellen.

In ähnlicher Weise können Sie eine veränderbare Ansicht des Typs QAssociativeIterable auf einem beliebigen, mit Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE() registrierten Container erstellen.

Siehe auch convert(), QSequentialIterable, Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(), QAssociativeIterable, und 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 auf ihre Reihenfolge.

Gibt QPartialOrdering::Unordered zurück, wenn der Vergleich nicht unterstützt wird oder die Werte nicht geordnet sind. Gibt andernfalls 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 nullptr ist, sind die Werte nicht geordnet. Der Vergleich wird nur unterstützt, wenn der Kleiner-als-Operator des Typs für die Metatyp-Deklaration sichtbar war.

Wenn der Gleichheitsoperator des Typs ebenfalls sichtbar war, werden die Werte nur dann gleich verglichen, wenn der Gleichheitsoperator dies besagt. Wenn kein Gleichheitsoperator vorhanden ist, werden die Werte als gleich angesehen, wenn keiner der beiden Werte kleiner als der andere ist. Wenn auch Gleichheit vorhanden ist und zwei solche Werte nicht gleich sind, werden sie als ungeordnet angesehen, so wie NaN (not a number) Werte eines Fließkommatyps außerhalb seiner Ordnung liegen.

Hinweis: Wenn kein less than-Operator für die Metatyp-Deklaration sichtbar war, sind die Werte ungeordnet, selbst wenn ein für die Deklaration sichtbarer Gleichheitsoperator sie als gleich ansieht: compare() == 0 stimmt nur mit equals() überein, wenn der less than-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

Konstruiert einen Wert des Typs, für den diese QMetaType Instanz konstruiert wurde, in dem durch where adressierten Speicher, der eine Kopie von copy ist, und gibt where zurück. Wenn copy Null ist, wird der Wert standardmäßig konstruiert.

Dies ist eine Low-Level-Funktion zur expliziten Verwaltung des zur Speicherung des Typs verwendeten Speichers. Ziehen Sie in Erwägung, create() aufzurufen, wenn Sie diese Ebene der Kontrolle nicht benötigen (d.h. verwenden Sie "new" statt "placement new").

Sie müssen sicherstellen, dass where auf eine Stelle zeigt, an der 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 als der Typ ist, es sei denn, diese Ausrichtung ist größer als die maximal sinnvolle Ausrichtung für die Plattform. In der Praxis ist eine Ausrichtung, die größer als 2 * sizeof(void*) ist, nur für spezielle Hardwareanweisungen erforderlich (z. B. ausgerichtete SSE-Lade- und Speicheroperationen 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 Speicherplatz unter to mit der Typisierung 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, sie ist von dem Typ, für den diese QMetaType Instanz erstellt wurde. Wenn copy nullptr ist, wird eine standardmäßig konstruierte Instanz erstellt.

Siehe auch QMetaType::destroy().

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

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

void QMetaType::destroy(void *data) const

Zerstört die data, vorausgesetzt, sie ist von dem Typ, für den diese QMetaType Instanz erstellt wurde.

Siehe auch QMetaType::create().

void QMetaType::destruct(void *data) const

Zerstört den Wert, der sich unter data befindet, unter der Annahme, dass er von dem Typ ist, für den diese QMetaType Instanz konstruiert wurde.

Im Gegensatz zu destroy() ruft diese Funktion nur den Destruktor des Typs auf, sie ruft nicht den Löschoperator auf.

Siehe auch QMetaType::construct().

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

Vergleicht die Objekte auf lhs und rhs auf Gleichheit.

Beide Objekte müssen von dem durch diesen Metatyp beschriebenen Typ sein. Kann die beiden Objekte nur vergleichen, wenn ein Kleiner-als- oder Gleichheitsoperator für den Typ in der Metatyp-Deklaration sichtbar war. Andernfalls betrachtet der Metatyp die Werte nie als gleich. Wenn ein Gleichheitsoperator für die Metatyp-Deklaration sichtbar war, ist er maßgebend; andernfalls, wenn less than sichtbar ist, werden die beiden Werte als gleich betrachtet, wenn keiner der beiden Werte kleiner als der andere ist. Wenn die Werte nicht geordnet sind (siehe compare() für Details), sind sie nicht gleich.

Gibt true zurück, wenn die beiden Objekte gleich sind, sonst 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 QMetaType Instanz erstellt wurde. Um bestimmte Typeneigenschaften zu untersuchen, verwenden Sie lieber eine der "is-" Funktionen als die Flags direkt.

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

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

Gibt ein QMetaType zurück, das typeName entspricht. Das zurückgegebene Objekt ist nicht gültig, wenn der typeName nicht bekannt ist für QMetaType

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

Gibt die QMetaType zurück, die dem Typ im Template-Parameter entspricht.

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

Gibt true zurück, wenn das Metatypsystem eine registrierte Konvertierung von meta type id fromType in toType

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

Gibt true zurück, wenn das Meta-Typ-System eine registrierte Konvertierung von Typ From nach Typ To hat.

Dies ist eine überladene Funktion.

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

Gibt true zurück, wenn das Metatypsystem 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 hat.

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 auf die Metatyp-ID fromType der Metatyp-ID toType hat.

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

Gibt true zurück, wenn das Meta-Typ-System eine registrierte veränderbare Sicht auf den Typ From vom Typ To hat.

Dies ist eine überladene Funktion.

Diese Funktion wurde in Qt 6.0 eingeführt.

int QMetaType::id() const

Gibt den id-Typ zurück, der in dieser QMetatype-Instanz enthalten ist.

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

Gibt true zurück, wenn dieser Typ als Kopie konstruiert werden kann. Wenn dies der Fall ist, können construct() und create() mit einem copy Parameter, der nicht null ist, 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 standardmäßig konstruiert werden kann. Wenn dies der Fall ist, können construct() und create() mit einem Parameter copy verwendet werden, der 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. Wenn dies der Fall ist, können 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 für die 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 bewegt werden kann. QMetaType hat derzeit keine API, um diese Eigenschaft 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 für die Metatyp-Deklaration sichtbar war, andernfalls false.

Siehe auch compare() und isEqualityComparable().

bool QMetaType::isRegistered() const

Gibt true zurück, wenn dieses QMetaType Objekt bei der globalen Qt-Metatyp-Registrierung registriert wurde. Die Registrierung ermöglicht es, den Typ über seinen Namen (mit QMetaType::fromName()) oder über seine ID (mit dem Konstruktor) zu finden.

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(), typeName(), und Type.

bool QMetaType::isValid() const

Gibt true zurück, wenn dieses QMetaType Objekt gültige Informationen über einen Typ enthält, andernfalls false.

Siehe auch isRegistered().

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

Liest das Objekt dieses Typs aus dem angegebenen stream in data. 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 QVariant's operator>>(), die sich auf load() stützt, um benutzerdefinierte Typen zu streamen.

Siehe auch save().

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

Gibt eine QMetaObject relativ zu diesem Typ zurück.

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

Wenn der Typ ein Q_GADGET ist, enthält flags() QMetaType::IsGadget. Wenn der Typ ein Zeiger auf ein Q_GADGET ist, enthält flags() QMetaType::PointerToGadget. In beiden Fällen gibt diese Funktion ihre QMetaObject zurück. Dies kann verwendet werden, um QMetaMethod und QMetaProperty abzurufen und sie auf einen Zeiger dieses Typs anzuwenden, wie es z. B. durch QVariant::data() geschieht.

Wenn der Typ eine Aufzählung ist, 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, ansonsten nullptr.

Siehe auch QMetaType::flags().

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

Gibt den Typnamen zurück, der mit diesem QMetaType verbunden ist, oder einen Null-Zeiger, wenn 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 von Typ From zu Typ To im Meta-Typ-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::*)() const function)

Dies ist eine überladene Funktion.

Registriert eine Methode function wie To From::function() const als Konverter vom Typ From zum Typ To im Metatypsystem. 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);

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

Dies ist eine überladene Funktion.

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

Der Zeiger ok kann von der Funktion verwendet werden, um anzuzeigen, 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);

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

Dies ist eine überladene Funktion.

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

function muss eine Instanz vom Typ From annehmen und eine Instanz von To zurückgeben. Es kann ein Funktionszeiger, ein Lambda oder ein Funktorobjekt sein. Seit Qt 6.5 kann function auch eine Instanz von std::optional<To> zurückgeben, um fehlgeschlagene Konvertierungen anzeigen zu können.

QMetaType::registerConverter<CustomStringType, QString>([](const CustomStringType &str) {
    return QString::fromUtf8(str.data());
});
QMetaType::registerConverter<QJsonValue, QPointF>(
          [](const QJsonValue &value) -> std::optional<QPointF> {
    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 QPointF{object["x"].toDouble(), object["y"].toDouble()};
});

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

Dies ist eine überladene Funktion.

Registriert eine Methode function wie To From::function() als veränderbare Sicht des Typs To auf den Typ From im Metatypsystem. Gibt true zurück, wenn die Registrierung erfolgreich war, andernfalls false.

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)

Dies ist eine überladene Funktion.

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

Diese Funktion wurde in Qt 6.0 eingeführt.

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

Registriert diese QMetaType in der Typregistrierung, so dass sie über den Namen gefunden werden kann, indem QMetaType::fromName() verwendet wird.

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 das 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 QVariant's operator<<(), 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 Bytes 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 Verwaltung des von einem Typ verwendeten Speichers auf niedriger Ebene durchzuführen.

Siehe auch QMetaType::construct(), QMetaType::sizeOf(), 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 mit demselben Vorzeichen und derselben Größe wie der zugrunde liegende Typ der Aufzählung zurück. Wenn es sich um einen QFlags Typ handelt, wird QMetaType::Int zurückgegeben. 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)

Erzeugt eine veränderbare Sicht auf das Objekt unter from von fromType in dem zuvor zugewiesenen Speicherplatz unter to mit dem 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 Hashwert für key zurück, wobei seed als Seed für die Berechnung verwendet wird.

Diese Funktion wurde in Qt 6.4 eingeführt.

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

Gibt die Meta-Typ-ID des Typs T zur Kompilierungszeit 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 zurück wie qMetaTypeId(), führt aber zur Laufzeit eine Suche anhand des Namens des Typs durch. QMetaType::type() ist etwas langsamer, aber die Kompilierung ist erfolgreich, 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 ein vollständig definierter Typ zum Zeitpunkt des Funktionsaufrufs ist. Bei Zeigertypen muss auch der Typ, auf den gezeigt wird, vollständig definiert sein. Verwenden Sie Q_DECLARE_OPAQUE_POINTER(), um Zeiger auf vorwärts deklarierte Typen registrieren zu können.

Für die Verwendung des Typs T in QMetaType, QVariant oder mit der API QObject::property() ist eine Registrierung nicht erforderlich.

Um den Typ T in Warteschlangen-Signal- und Slot-Verbindungen zu verwenden, muss qRegisterMetaType<T>() aufgerufen werden, bevor die erste Verbindung hergestellt wird. Dies geschieht normalerweise im Konstruktor der Klasse, die T verwendet, oder in der Funktion main().

Nachdem ein Typ registriert wurde, kann er über seinen Namen mit QMetaType::fromName() gefunden werden.

Siehe auch Q_DECLARE_METATYPE().

[since 6.5] int qRegisterMetaType(QMetaType meta)

Registriert den Metatyp meta und gibt seine Typ-Id zurück.

Diese Funktion setzt voraus, dass T zu dem Zeitpunkt, zu dem die Funktion aufgerufen wird, ein vollständig definierter Typ ist. Bei Zeigertypen muss auch der Typ, auf den gezeigt wird, 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 den Typ T in Warteschlangen-Signal- und Slot-Verbindungen zu verwenden, muss qRegisterMetaType<T>() aufgerufen werden, bevor die erste Verbindung hergestellt wird. Dies geschieht normalerweise im Konstruktor der Klasse, die T verwendet, oder in der Funktion main().

Nachdem ein Typ registriert wurde, kann er über seinen Namen mit QMetaType::fromName() gefunden werden.

Diese Funktion wurde in Qt 6.5 eingeführt.

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

Dies ist eine überladene Funktion.

Gibt true zurück, wenn QMetaType lhs einen anderen Typ repräsentiert als QMetaType rhs , andernfalls gibt sie false zurück.

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

Schreibt die 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)

Dies ist eine überladene Funktion.

Gibt true zurück, wenn QMetaType lhs denselben Typ repräsentiert wie QMetaType rhs , andernfalls false.

Makro-Dokumentation

Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE(Container)

Dieses Makro macht den Container Container dem QMetaType als assoziativen Container bekannt. Dies macht es möglich, eine Instanz von Container<T, U> in einen QVariant zu setzen, wenn T und U selbst QMetaType bekannt sind.

Beachten Sie, dass alle assoziativen Container von Qt bereits eine eingebaute Unterstützung haben und es nicht notwendig ist, dieses Makro mit ihnen zu verwenden. Der std::map Container hat ebenfalls eingebaute Unterstützung.

Dieses Beispiel zeigt eine typische Anwendung von Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE():

#include <unordered_list>

Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE(std::unordered_map)

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

Q_DECLARE_METATYPE(Type)

Mit diesem Makro wird der Typ Type in QMetaType bekannt gemacht, solange er einen öffentlichen Standardkonstruktor, einen öffentlichen Kopierkonstruktor und einen öffentlichen Destruktor bereitstellt. Es wird benötigt, um den Typ Type als einen benutzerdefinierten Typ in QVariant zu verwenden.

Dieses Makro setzt voraus, dass Type an dem Punkt, an dem es verwendet wird, ein vollständig definierter Typ ist. Für Zeigertypen ist es auch erforderlich, dass der Typ, auf den gezeigt wird, vollständig definiert ist. Verwenden Sie es in Verbindung mit Q_DECLARE_OPAQUE_POINTER(), um Zeiger auf vorwärts deklarierte Typen zu registrieren.

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

Das Hinzufügen eines Q_DECLARE_METATYPE() macht den Typ allen Template-basierten Funktionen bekannt, einschließlich QVariant. Beachten Sie, dass Sie, wenn Sie den Typ in Warteschlangen-Signal- und Slot-Verbindungen oder im Eigenschaftssystem von QObject verwenden wollen, auch 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)

Wenn MyStruct in einem Namespace liegt, muss das Makro Q_DECLARE_METATYPE() außerhalb des Namespaces liegen:

namespace MyNamespace
{
    ...
}

Q_DECLARE_METATYPE(MyNamespace::MyStruct)

Da MyStruct nun QMetaType bekannt ist, 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, wenn sie zum Zeitpunkt der Registrierung sichtbar sind. Da dies an einigen Stellen automatisch geschieht, wird dringend empfohlen, die Stream-Operatoren für einen Typ direkt nach dem Typ selbst zu deklarieren. Wegen der argumentabhängigen Lookup-Regeln von C++ wird außerdem dringend empfohlen, die Operatoren im gleichen Namensraum wie den Typ selbst zu deklarieren.

Die Stream-Operatoren sollten die folgenden Signaturen haben:

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

Siehe auch qRegisterMetaType().

Q_DECLARE_OPAQUE_POINTER(PointerType)

Mit diesem Makro können Zeiger auf vorwärts deklarierte Typen (PointerType) mit QMetaType registriert werden, indem entweder Q_DECLARE_METATYPE() oder qRegisterMetaType() verwendet wird.

Siehe auch Q_DECLARE_METATYPE() und qRegisterMetaType().

Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(Container)

Dieses Makro macht den Container Container bei QMetaType als sequentiellen Container bekannt. Dies macht es möglich, eine Instanz von Container<T> in einen QVariant zu setzen, wenn T selbst QMetaType bekannt ist.

Beachten Sie, dass alle sequentiellen Container von Qt bereits über eine eingebaute Unterstützung verfügen und es nicht notwendig ist, dieses Makro für sie zu verwenden. Die std::vector und std::list Container haben ebenfalls eingebaute Unterstützung.

Dieses Beispiel zeigt eine typische Anwendung 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 SmartPointer SmartPointer bei QMetaType als SmartPointer bekannt. Damit ist es möglich, eine Instanz von SmartPointer<T> in ein QVariant zu setzen, wenn T ein Typ ist, der QObject erbt.

Beachten Sie, dass QWeakPointer, QSharedPointer und QPointer bereits eine eingebaute Unterstützung haben und es nicht notwendig ist, dieses Makro mit ihnen zu verwenden.

Dieses Beispiel zeigt eine typische Anwendung von Q_DECLARE_SMART_POINTER_METATYPE():

#include <memory>Q_DECLARE_SMART_POINTER_METATYPE(std::shared_ptr)void someFunc() { 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'.
    }

© 2025 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.