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) |
Verwandte Nicht-Mitglieder
(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
Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE(Container) | |
Q_DECLARE_METATYPE(Type) | |
Q_DECLARE_OPAQUE_POINTER(PointerType) | |
Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(Container) | |
Q_DECLARE_SMART_POINTER_METATYPE(SmartPointer) |
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:
Konstante | Wert | Beschreibung |
---|---|---|
QMetaType::Void | 43 | void |
QMetaType::Bool | 1 | bool |
QMetaType::Int | 2 | int |
QMetaType::UInt | 3 | unsigned int |
QMetaType::Double | 6 | double |
QMetaType::QChar | 7 | QChar |
QMetaType::QString | 10 | QString |
QMetaType::QByteArray | 12 | QByteArray |
QMetaType::Nullptr | 51 | std::nullptr_t |
QMetaType::VoidStar | 31 | void * |
QMetaType::Long | 32 | long |
QMetaType::LongLong | 4 | LongLong |
QMetaType::Short | 33 | short |
QMetaType::Char | 34 | char |
QMetaType::Char16 | 56 | char16_t |
QMetaType::Char32 | 57 | char32_t |
QMetaType::ULong | 35 | unsigned long |
QMetaType::ULongLong | 5 | ULongLong |
QMetaType::UShort | 36 | unsigned short |
QMetaType::SChar | 40 | signed char |
QMetaType::UChar | 37 | unsigned char |
QMetaType::Float | 38 | float |
QMetaType::Float16 | 63 | qfloat16 |
QMetaType::QObjectStar | 39 | QObject * |
QMetaType::QCursor | 0x100a | QCursor |
QMetaType::QDate | 14 | QDate |
QMetaType::QSize | 21 | QSize |
QMetaType::QTime | 15 | QTime |
QMetaType::QVariantList | 9 | QVariantList |
QMetaType::QPolygon | 0x1007 | QPolygon |
QMetaType::QPolygonF | 0x1016 | QPolygonF |
QMetaType::QColor | 0x1003 | QColor |
QMetaType::QColorSpace | 0x1017 | QColorSpace (eingeführt in Qt 5.15) |
QMetaType::QSizeF | 22 | QSizeF |
QMetaType::QRectF | 20 | QRectF |
QMetaType::QLine | 23 | QLine |
QMetaType::QTextLength | 0x100d | QTextLength |
QMetaType::QStringList | 11 | QStringList |
QMetaType::QVariantMap | 8 | QVariantMap |
QMetaType::QVariantHash | 28 | QVariantHash |
QMetaType::QVariantPair | 58 | QVariantPair |
QMetaType::QIcon | 0x1005 | QIcon |
QMetaType::QPen | 0x100c | QPen |
QMetaType::QLineF | 24 | QLineF |
QMetaType::QTextFormat | 0x100e | QTextFormat |
QMetaType::QRect | 19 | QRect |
QMetaType::QPoint | 25 | QPoint |
QMetaType::QUrl | 17 | QUrl |
QMetaType::QRegularExpression | 44 | QRegularAusdruck |
QMetaType::QDateTime | 16 | QDateTime |
QMetaType::QPointF | 26 | QPointF |
QMetaType::QPalette | 0x1004 | QPalette |
QMetaType::QFont | 0x1000 | QFont |
QMetaType::QBrush | 0x1002 | QBrush |
QMetaType::QRegion | 0x1008 | QRegion |
QMetaType::QBitArray | 13 | QBitArray |
QMetaType::QImage | 0x1006 | QImage |
QMetaType::QKeySequence | 0x100b | QKeySequence |
QMetaType::QSizePolicy | 0x2000 | QSizePolicy |
QMetaType::QPixmap | 0x1001 | QPixmap |
QMetaType::QLocale | 18 | QLocale |
QMetaType::QBitmap | 0x1009 | QBitmap |
QMetaType::QTransform | 0x1010 | QTransform |
QMetaType::QMatrix4x4 | 0x1011 | QMatrix4x4 |
QMetaType::QVector2D | 0x1012 | QVector2D |
QMetaType::QVector3D | 0x1013 | QVektor3D |
QMetaType::QVector4D | 0x1014 | QVektor4D |
QMetaType::QQuaternion | 0x1015 | QQuaternion |
QMetaType::QEasingCurve | 29 | QEasingCurve |
QMetaType::QJsonValue | 45 | QJsonValue |
QMetaType::QJsonObject | 46 | QJsonObject |
QMetaType::QJsonArray | 47 | QJsonArray |
QMetaType::QJsonDocument | 48 | QJsonDocument |
QMetaType::QCborValue | 53 | QCborWert |
QMetaType::QCborArray | 54 | QCborArray |
QMetaType::QCborMap | 55 | QCborMap |
QMetaType::QCborSimpleType | 52 | QCborSimpleType |
QMetaType::QModelIndex | 42 | QModelIndex |
QMetaType::QPersistentModelIndex | 50 | QPersistentModelIndex (eingeführt in Qt 5.5) |
QMetaType::QUuid | 30 | QUuid |
QMetaType::QByteArrayList | 49 | QByteArrayList |
QMetaType::QVariant | 41 | QVariant |
QMetaType::User | 65536 | Basiswert für Benutzertypen |
QMetaType::UnknownType | 0 | Dies 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.
Konstante | Wert | Beschreibung |
---|---|---|
QMetaType::NeedsConstruction | 0x1 | Dieser Typ hat einen Standardkonstruktor. Wenn das Flag nicht gesetzt ist, können Instanzen sicher mit memset auf 0 initialisiert werden. |
QMetaType::NeedsCopyConstruction | 0x4000 | (seit 6.5) Dieser Typ hat einen nicht-trivialen Kopierkonstruktor. Wenn das Flag nicht gesetzt ist, können Instanzen mit memcpy kopiert werden. |
QMetaType::NeedsMoveConstruction | 0x8000 | (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::NeedsDestruction | 0x2 | Dieser Typ hat einen nicht-trivialen Destruktor. Wenn das Flag nicht gesetzt ist, ist ein Aufruf des Destruktors nicht notwendig, bevor Objekte verworfen werden. |
QMetaType::RelocatableType | 0x4 | Eine Instanz eines Typs mit diesem Attribut kann mit memcpy sicher an eine andere Speicherstelle verschoben werden. |
QMetaType::IsEnumeration | 0x10 | Dieser Typ ist eine Aufzählung. |
QMetaType::IsUnsignedEnumeration | 0x100 | Wenn der Typ eine Enumeration ist, ist der zugrunde liegende Typ unsigned. |
QMetaType::PointerToQObject | 0x8 | Dieser Typ ist ein Zeiger auf eine von QObject abgeleitete Klasse. |
QMetaType::IsPointer | 0x800 | Dieser Typ ist ein Zeiger auf einen anderen Typ. |
QMetaType::IsConst | 0x2000 | Zeigt 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:
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:
- Zeiger auf Klassen, die von QObject
- QList<T>, QQueue<T>, QStack<T> oder QSet<T>, wobei T ein registrierter Metatyp ist
- QHash<T1, T2>, QMap<T1, T2> oder std::pair<T1, T2>, wobei T1 und T2 registrierte Metatypen sind
- QPointer<T>, QSharedPointer<T>, QWeakPointer<T>, wobei T eine Klasse ist, die sich ableitet von QObject
- Aufzählungen, die mit Q_ENUM registriert sind, oder Q_FLAG
- Klassen, die ein Q_GADGET Makro haben.
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.