QMetaObject Struct
Die Klasse `QMetaObject` enthält Metainformationen zu Qt-Objekten. Mehr...
| Header: | #include <QMetaObject> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
Öffentliche Typen
| class | Connection |
Öffentliche Funktionen
| QMetaClassInfo | classInfo(int index) const |
| int | classInfoCount() const |
| int | classInfoOffset() const |
| const char * | className() const |
| QMetaMethod | constructor(int index) const |
| int | constructorCount() const |
| QMetaEnum | enumerator(int index) const |
| int | enumeratorCount() const |
| int | enumeratorOffset() const |
| int | indexOfClassInfo(const char *name) const |
| int | indexOfConstructor(const char *constructor) const |
| int | indexOfEnumerator(const char *name) const |
| int | indexOfMethod(const char *method) const |
| int | indexOfProperty(const char *name) const |
| int | indexOfSignal(const char *signal) const |
| int | indexOfSlot(const char *slot) const |
| bool | inherits(const QMetaObject *metaObject) const |
(since 6.2) QMetaType | metaType() const |
| QMetaMethod | method(int index) const |
| int | methodCount() const |
| int | methodOffset() const |
(since 6.5) QObject * | newInstance(Args &&... arguments) const |
| QMetaProperty | property(int index) const |
| int | propertyCount() const |
| int | propertyOffset() const |
| const QMetaObject * | superClass() const |
| QMetaProperty | userProperty() const |
Statische öffentliche Elemente
| bool | checkConnectArgs(const char *signal, const char *method) |
| bool | checkConnectArgs(const QMetaMethod &signal, const QMetaMethod &method) |
(since 6.10) QMetaObject::Connection | connect(const QObject *sender, const QMetaMethod &signal, const QObject *context, Functor functor, Qt::ConnectionType type = Qt::AutoConnection) |
(since 6.10) QMetaObject::Connection | connect(const QObject *sender, const QMetaMethod &signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection) |
| void | connectSlotsByName(QObject *object) |
(since 6.7) bool | invokeMethod(QObject *context, Functor &&function, Args &&... arguments) |
| bool | invokeMethod(QObject *context, Functor &&function, FunctorReturnType *ret) |
(since 6.5) bool | invokeMethod(QObject *obj, const char *member, Args &&... args) |
(since 6.7) bool | invokeMethod(QObject *context, Functor &&function, QTemplatedMetaMethodReturnArgument<FunctorReturnType> ret, Args &&... arguments) |
(since 6.7) bool | invokeMethod(QObject *context, Functor &&function, Qt::ConnectionType type, Args &&... arguments) |
| bool | invokeMethod(QObject *context, Functor &&function, Qt::ConnectionType type = Qt::AutoConnection, FunctorReturnType *ret = nullptr) |
(since 6.5) bool | invokeMethod(QObject *obj, const char *member, QTemplatedMetaMethodReturnArgument<ReturnArg> ret, Args &&... args) |
(since 6.5) bool | invokeMethod(QObject *obj, const char *member, Qt::ConnectionType type, Args &&... args) |
(since 6.7) bool | invokeMethod(QObject *context, Functor &&function, Qt::ConnectionType type, QTemplatedMetaMethodReturnArgument<FunctorReturnType> ret, Args &&... arguments) |
(since 6.5) bool | invokeMethod(QObject *obj, const char *member, Qt::ConnectionType type, QTemplatedMetaMethodReturnArgument<ReturnArg> ret, Args &&... args) |
| QByteArray | normalizedSignature(const char *method) |
| QByteArray | normalizedType(const char *type) |
Makros
| QMetaMethodArgument | Q_ARG(Type, const Type &value) |
| QMetaMethodReturnArgument | Q_RETURN_ARG(Type, Type &value) |
Ausführliche Beschreibung
Das Qt-Metaobjektsystem in Qt ist für den Kommunikationsmechanismus zwischen Objekten über Signale und Slots, für Laufzeittypinformationen sowie für das Qt-Eigenschaftssystem zuständig. Für jede in einer Anwendung verwendete Unterklasse von ` QObject ` wird eine einzelne `QMetaObject`-Instanz erstellt, die alle Metainformationen für die Unterklasse von ` QObject ` speichert. Dieses Objekt ist über ` QObject::metaObject()` verfügbar.
Diese Klasse wird normalerweise für die Anwendungsprogrammierung nicht benötigt, ist jedoch nützlich, wenn Sie Meta-Anwendungen wie Skript-Engines oder GUI-Builder schreiben.
Die folgenden Funktionen dürften für Sie am nützlichsten sein:
- className() gibt den Namen einer Klasse zurück.
- superClass() gibt das Metaobjekt der Oberklasse zurück.
- method() und ` methodCount()` liefern Informationen über die Metamethoden einer Klasse (Signale, Slots und andere ` invokable `-Mitgliedsfunktionen).
- enumerator() und enumeratorCount() liefern Informationen zu den Enumeratoren einer Klasse.
- propertyCount() und property() liefern Informationen über die Eigenschaften einer Klasse.
- constructor() und constructorCount() liefern Informationen über die Metakonstruktoren einer Klasse.
Die Indexfunktionen „ indexOfConstructor()“, „ indexOfMethod()“, „ indexOfEnumerator()“ und „ indexOfProperty()“ ordnen Namen von Konstruktoren, Mitgliedsfunktionen, Enumeratoren oder Eigenschaften Indizes im Metaobjekt zu. Beispielsweise verwendet Qt intern „ indexOfMethod()“, wenn Sie ein Signal mit einem Slot verbinden.
Klassen können zudem eine Liste vonName-Wert-Paaren mit zusätzlichen Klasseninformationen enthalten, die in ` QMetaClassInfo `-Objekten gespeichert sind. Die Anzahl der Paare wird von ` classInfoCount()` zurückgegeben, einzelne Paare werden von ` classInfo()` zurückgegeben, und Sie können mit ` indexOfClassInfo()` nach Paaren suchen.
Hinweis: Operationen , die das Metaobjektsystem nutzen, sind im Allgemeinen threadsicher, da QMetaObjects typischerweise statische, schreibgeschützte Instanzen sind, die zur Kompilierungszeit generiert werden. Werden Metaobjekte jedoch von der Anwendung dynamisch verändert (beispielsweise bei Verwendung von ` QQmlPropertyMap`), muss die Anwendung den Zugriff auf das jeweilige Metaobjekt explizit synchronisieren.
Siehe auch ` QMetaClassInfo`, ` QMetaEnum`, ` QMetaMethod`, ` QMetaProperty`, ` QMetaType` und „Meta-Objekt-System“.
Dokumentation zu Mitgliedsfunktionen
[static] bool QMetaObject::checkConnectArgs(const char *signal, const char *method)
Gibt „ true “ zurück, wenn die Argumente „ signal “ und „ method “ kompatibel sind; andernfalls wird „ false “ zurückgegeben.
Sowohl „ signal “ als auch „ method “ müssen normalisiert sein.
Siehe auch normalizedSignature().
[static] bool QMetaObject::checkConnectArgs(const QMetaMethod &signal, const QMetaMethod &method)
Gibt „ true “ zurück, wenn die Argumente „ signal “ und „ method “ kompatibel sind; andernfalls wird „ false “ zurückgegeben.
Dies ist eine überladene Funktion.
QMetaClassInfo QMetaObject::classInfo(int index) const
Gibt die Metadaten für das Element der Klasse „information“ mit dem angegebenen „ index “ zurück.
Beispiel:
class MyClass : public QObject
{
Q_OBJECT
Q_CLASSINFO("author", "Sabrina Schweinsteiger")
Q_CLASSINFO("url", "http://doc.moosesoft.co.uk/1.0/")
public:
//...
};Siehe auch classInfoCount(), classInfoOffset() und indexOfClassInfo().
int QMetaObject::classInfoCount() const
Gibt die Anzahl der Elemente der Klasse „information“ in dieser Klasse zurück.
Siehe auch classInfo(), classInfoOffset() und indexOfClassInfo().
int QMetaObject::classInfoOffset() const
Gibt den Offset der Klasseninformationen für diese Klasse zurück, d. h. die Indexposition des ersten Klasseninformationselements dieser Klasse.
Wenn die Klasse keine Oberklassen mit Klasseninformationen hat, beträgt der Offset 0; andernfalls entspricht der Offset der Summe aller Klasseninformationen in den Oberklassen der Klasse.
Siehe auch classInfo(), classInfoCount() und indexOfClassInfo().
const char *QMetaObject::className() const
Gibt den Klassennamen zurück.
Siehe auch ` superClass()`.
[static, since 6.10] template <typename Functor> QMetaObject::Connection QMetaObject::connect(const QObject *sender, const QMetaMethod &signal, const QObject *context, Functor functor, Qt::ConnectionType type = Qt::AutoConnection)
Erstellt eine Verbindung eines bestimmten ` type ` aus ` signal ` im Objekt ` sender ` zu ` functor `, die in einer bestimmten Ereignisschleife von ` context` platziert werden soll. Gibt ein Handle für die Verbindung zurück, mit dem diese später getrennt werden kann. Dies kann nützlich sein, um ein Signal, das durch Metaobjekt-Introspektion abgerufen wurde, mit einem Lambda zu verbinden, das lokale Variablen erfasst.
Hinweis: Qt ::UniqueConnections funktionieren nicht für Lambdas, Nicht-Member-Funktionen und Funktoren; sie gelten nur für Member-Funktionen.
Die Slot-Funktion kann eine beliebige Funktion oder ein beliebiger Funktor sein, der genauso viele oder weniger Argumente hat als das Signal. Es muss eine exakte Übereinstimmung zwischen den entsprechenden Signal- und Slot-Argumenten bestehen; implizite Konvertierungen und Typüberprüfungen werden von dieser Funktion nicht berücksichtigt. Überladene Funktoren müssen mithilfe von ` qOverload` explizit aufgelöst werden. ` signal ` muss die Metamethode eines Signals sein, andernfalls wird eine ungültige Verbindung zurückgegeben.
Die Verbindung wird automatisch getrennt, wenn der Sender oder der Kontext zerstört wird. Sie sollten jedoch darauf achten, dass alle innerhalb des Funktors verwendeten Objekte noch vorhanden sind, wenn das Signal ausgelöst wird.
Diese Funktion überlädt `QMetaObject::connect()`.
Hinweis: Diese Funktion ist threadsicher.
Diese Funktion wurde in Qt 6.10 eingeführt.
Siehe auch QObject::connect() und QObject::disconnect().
[static, since 6.10] template <typename PointerToMemberFunction> QMetaObject::Connection QMetaObject::connect(const QObject *sender, const QMetaMethod &signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection)
Erstellt eine Verbindung des angegebenen „ type “ vom „ signal “ im „ sender “-Objekt zum „ method “ im „ receiver “-Objekt. Gibt ein Handle für die Verbindung zurück, mit dem diese später getrennt werden kann.
Das Connection-Handle ist ungültig, wenn die Verbindung nicht hergestellt werden kann, beispielsweise weil die Parameter ungültig waren. Sie können überprüfen, ob das „ QMetaObject::Connection “ gültig ist, indem Sie es in einen bool-Wert umwandeln. Übergeben Sie das zurückgegebene Handle an „ QObject::disconnect()“, um die Verbindung zu trennen.
Ein Slot kann mit einem bestimmten Signal verbunden werden, wenn das Signal mindestens so viele Argumente hat wie der Slot. Es muss eine exakte Übereinstimmung zwischen den entsprechenden Signal- und Slot-Argumenten bestehen; implizite Konvertierungen und Typüberprüfungen werden von dieser Funktion nicht unterstützt. Überladene Slots müssen explizit mithilfe von ` qOverload` aufgelöst werden. ` signal ` muss die Metamethode eines Signals sein, andernfalls wird eine ungültige Verbindung zurückgegeben.
Diese Funktion überlädt ` QMetaObject::connect()`.
Hinweis: Diese Funktion ist threadsicher.
Diese Funktion wurde in Qt 6.10 eingeführt.
Siehe auch QObject::connect() und QObject::disconnect().
[static] void QMetaObject::connectSlotsByName(QObject *object)
Sucht rekursiv nach allen untergeordneten Objekten des angegebenen object und verbindet übereinstimmende Signale von diesen mit Slots von object, die der folgenden Form entsprechen:
void on_<object name>_<signal name>(<signal parameters>);Nehmen wir an, unser Objekt hat ein untergeordnetes Objekt vom Typ ` QPushButton ` mit der ` object name ` button1. Der Slot zum Abfangen des Signals „ clicked() “ der Schaltfläche wäre:
void on_button1_clicked();Wenn „ object “ selbst über einen korrekt festgelegten Objektnamen verfügt, sind seine eigenen Signale ebenfalls mit den entsprechenden Slots verbunden.
Siehe auch QObject::setObjectName().
QMetaMethod QMetaObject::constructor(int index) const
Gibt die Metadaten für den Konstruktor mit der angegebenen „ index “ zurück.
Siehe auch ` constructorCount()` und ` newInstance()`.
int QMetaObject::constructorCount() const
Gibt die Anzahl der Konstruktoren in dieser Klasse zurück.
Siehe auch „ constructor()“ und „ indexOfConstructor()“.
QMetaEnum QMetaObject::enumerator(int index) const
Gibt die Metadaten für den Enumerator mit der angegebenen index zurück.
Siehe auch enumeratorCount(), enumeratorOffset() und indexOfEnumerator().
int QMetaObject::enumeratorCount() const
Gibt die Anzahl der Enumeratoren in dieser Klasse zurück.
Siehe auch „ enumerator()“, „ enumeratorOffset()“ und „ indexOfEnumerator()“.
int QMetaObject::enumeratorOffset() const
Gibt den Enumerator-Offset für diese Klasse zurück, d. h. die Indexposition des ersten Enumerators dieser Klasse.
Wenn die Klasse keine Oberklassen mit Enumeratoren hat, beträgt der Offset 0; andernfalls ist der Offset die Summe aller Enumeratoren in den Oberklassen der Klasse.
Siehe auch enumerator(), enumeratorCount() und indexOfEnumerator().
int QMetaObject::indexOfClassInfo(const char *name) const
Sucht nach dem Klassen-Informationselement „ name “ und gibt dessen Index zurück; andernfalls wird -1 zurückgegeben.
Siehe auch „ classInfo()“, „ classInfoCount()“ und „ classInfoOffset()“.
int QMetaObject::indexOfConstructor(const char *constructor) const
Sucht nach „ constructor “ und gibt dessen Index zurück; andernfalls wird -1 zurückgegeben.
Beachten Sie, dass die „ constructor “ in normalisierter Form vorliegen muss, wie sie von „ normalizedSignature()“ zurückgegeben wird.
Siehe auch constructor(), constructorCount() und normalizedSignature().
int QMetaObject::indexOfEnumerator(const char *name) const
Sucht den Enumerator „ name “ und gibt dessen Index zurück; andernfalls wird -1 zurückgegeben.
Siehe auch enumerator(), enumeratorCount() und enumeratorOffset().
int QMetaObject::indexOfMethod(const char *method) const
Sucht nach „ method “ und gibt dessen Index zurück; andernfalls wird -1 zurückgegeben.
Beachten Sie, dass die ` method ` in normalisierter Form vorliegen muss, wie sie von ` normalizedSignature()` zurückgegeben wird.
Siehe auch method(), methodCount(), methodOffset() und normalizedSignature().
int QMetaObject::indexOfProperty(const char *name) const
Sucht nach der Eigenschaft „ name “ und gibt deren Index zurück; andernfalls wird -1 zurückgegeben.
Siehe auch property(), propertyCount() und propertyOffset().
int QMetaObject::indexOfSignal(const char *signal) const
Sucht nach „ signal “ und gibt dessen Index zurück; andernfalls wird -1 zurückgegeben.
Dies entspricht der Funktion „ indexOfMethod()“, mit dem Unterschied, dass -1 zurückgegeben wird, wenn die Methode zwar existiert, es sich dabei jedoch nicht um ein Signal handelt.
Beachten Sie, dass der „ signal “ in normalisierter Form vorliegen muss, wie sie von „ normalizedSignature()“ zurückgegeben wird.
Siehe auch indexOfMethod(), normalizedSignature(), method(), methodCount() und methodOffset().
int QMetaObject::indexOfSlot(const char *slot) const
Sucht nach „ slot “ und gibt dessen Index zurück; andernfalls wird -1 zurückgegeben.
Dies entspricht der Funktion ` indexOfMethod()`, mit dem Unterschied, dass hier -1 zurückgegeben wird, wenn die Methode zwar existiert, aber kein Slot ist.
Siehe auch „ indexOfMethod()“, „ method()“, „ methodCount()“ und „ methodOffset()“.
[noexcept] bool QMetaObject::inherits(const QMetaObject *metaObject) const
Gibt „ true “ zurück, wenn die durch diesen QMetaObject beschriebene Klasse den durch metaObject beschriebenen Typ erbt; andernfalls wird „false“ zurückgegeben.
Ein Typ gilt als von sich selbst erbt.
[static, since 6.7] template <typename Functor, typename... Args> bool QMetaObject::invokeMethod(QObject *context, Functor &&function, Args &&... arguments)
[static, since 6.7] template <
typename Functor,
typename FunctorReturnType,
typename... Args
>
bool QMetaObject::invokeMethod(QObject *context, Functor &&function, QTemplatedMetaMethodReturnArgument<FunctorReturnType> ret, Args &&... arguments)
[static, since 6.7] template <typename Functor, typename... Args> bool QMetaObject::invokeMethod(QObject *context, Functor &&function, Qt::ConnectionType type, Args &&... arguments)
[static, since 6.7] template <
typename Functor,
typename FunctorReturnType,
typename... Args
>
bool QMetaObject::invokeMethod(QObject *context, Functor &&function, Qt::ConnectionType type, QTemplatedMetaMethodReturnArgument<FunctorReturnType> ret, Args &&... arguments)
Ruft die Funktion „ function “ mit dem Argument „ arguments “ in der Ereignisschleife von „ context “ auf. „ function “ kann ein Funktor oder ein Zeiger auf eine Mitgliedsfunktion sein. Gibt „ true “ zurück, wenn die Funktion aufgerufen werden konnte. Der Rückgabewert des Funktionsaufrufs wird in „ ret “ gespeichert. Das für das Argument „ ret “ verwendete Objekt sollte durch Übergabe Ihres Objekts an „qReturnArg()“ abgerufen werden. Beispiel:
MyClass *obj = ...;
int result = 0;
QMetaObject::invokeMethod(obj, &MyClass::myMethod, qReturnArg(result), parameter);Ist „ type “ gesetzt, wird die Funktion unter Verwendung dieses Verbindungstyps aufgerufen. Andernfalls wird „ Qt::AutoConnection “ verwendet.
Hinweis: Diese Funktion ist threadsicher.
Diese Funktionen wurden in Qt 6.7 eingeführt.
[static] template <typename Functor, typename FunctorReturnType> bool QMetaObject::invokeMethod(QObject *context, Functor &&function, FunctorReturnType *ret)
[static] template <typename Functor, typename FunctorReturnType> bool QMetaObject::invokeMethod(QObject *context, Functor &&function, Qt::ConnectionType type = Qt::AutoConnection, FunctorReturnType *ret = nullptr)
Ruft die Funktion „ function “ in der Ereignisschleife von „ context “ auf. „ function “ kann ein Funktor oder ein Zeiger auf eine Mitgliedsfunktion sein. Gibt „ true “ zurück, wenn die Funktion aufgerufen werden konnte. Gibt „ false “ zurück, wenn keine solche Funktion vorhanden ist oder die Parameter nicht übereinstimmten. Der Rückgabewert des Funktionsaufrufs wird in „ ret “ gespeichert.
Ist „ type “ gesetzt, wird die Funktion unter Verwendung dieses Verbindungstyps aufgerufen. Andernfalls wird „ Qt::AutoConnection “ verwendet.
Hinweis: Diese Funktion ist threadsicher.
[static, since 6.5] template <typename... Args> bool QMetaObject::invokeMethod(QObject *obj, const char *member, Args &&... args)
[static, since 6.5] template <typename ReturnArg, typename... Args> bool QMetaObject::invokeMethod(QObject *obj, const char *member, QTemplatedMetaMethodReturnArgument<ReturnArg> ret, Args &&... args)
[static, since 6.5] template <typename... Args> bool QMetaObject::invokeMethod(QObject *obj, const char *member, Qt::ConnectionType type, Args &&... args)
[static, since 6.5] template <typename ReturnArg, typename... Args> bool QMetaObject::invokeMethod(QObject *obj, const char *member, Qt::ConnectionType type, QTemplatedMetaMethodReturnArgument<ReturnArg> ret, Args &&... args)
Ruft eine im Meta-Objekt-System registrierte Methode für das Objekt „ obj “ auf, das durch seinen Namen „ member “ identifiziert wird. Dazu gehören Slots, Signale und „ Q_INVOKABLE “-Methoden. Gibt „ true “ zurück, wenn das Element aufgerufen werden konnte. Gibt „ false “ zurück, wenn kein solches Element vorhanden ist oder die Parameter nicht übereinstimmten.
Bei den Überladungen mit einem `QTemplatedMetaMethodReturnArgument`-Parameter wird der Rückgabewert des Funktionsaufrufs ` member ` in ` ret` abgelegt. Bei den Überladungen ohne ein solches Element wird der Rückgabewert der aufgerufenen Funktion (falls vorhanden) verworfen. `QTemplatedMetaMethodReturnArgument` ist ein interner Typ, den Sie nicht direkt verwenden sollten. Verwenden Sie stattdessen die Funktion `qReturnArg()`.
Die Überladungen mit einem Parameter ` Qt::ConnectionType ` und ` type ` ermöglichen die explizite Auswahl, ob der Aufruf synchron erfolgen soll oder nicht:
- Ist ` type ` gleich ` Qt::DirectConnection`, wird das Element sofort im aktuellen Thread aufgerufen.
- Ist ` type ` auf ` Qt::QueuedConnection` gesetzt, wird ein ` QEvent ` gesendet, und das Element wird aufgerufen, sobald die Anwendung in den Ereignisschleife des Threads eintritt, in dem das ` obj ` erstellt oder verschoben wurde.
- Ist type gleich Qt::BlockingQueuedConnection, wird die Methode auf dieselbe Weise wie bei Qt::QueuedConnection aufgerufen, mit dem Unterschied, dass der aktuelle Thread blockiert, bis das Ereignis übermittelt wird. Die Verwendung dieses Verbindungstyps zur Kommunikation zwischen Objekten im selben Thread führt zu Deadlocks.
- Ist ` type ` gleich ` Qt::AutoConnection`, wird das Mitglied synchron aufgerufen, wenn sich ` obj ` im selben Thread wie der Aufrufer befindet; andernfalls wird das Mitglied asynchron aufgerufen. Dies ist das Verhalten der Überladungen, die keinen ` type `-Parameter haben.
Sie müssen dieser Funktion lediglich den Namen des Signals oder Slots übergeben, nicht die gesamte Signatur. Um beispielsweise den Slot „ quit()“ auf einem „ QThread “ asynchron aufzurufen, verwenden Sie den folgenden Code:
QMetaObject::invokeMethod(thread, "quit", Qt::QueuedConnection);Bei asynchronen Methodenaufrufen müssen die Parameter kopierbare Typen sein, da Qt die Argumente kopieren muss, um sie im Hintergrund in einem Ereignis zu speichern. Seit Qt 6.5 registriert diese Funktion die verwendeten Typen automatisch; als Nebeneffekt ist es jedoch nicht möglich, Aufrufe mit Typen durchzuführen, die nur vorwärtsdeklariert sind. Zudem ist es auch nicht möglich, asynchrone Aufrufe durchzuführen, die Referenzen auf nicht mit `const` qualifizierte Typen als Parameter verwenden.
Um den Slot „ compute(QString, int, double) “ auf einem beliebigen Objekt synchron aufzurufen obj dessen Rückgabewert abzurufen:
QString retVal;
QMetaObject::invokeMethod(obj, "compute", Qt::DirectConnection,
qReturnArg(retVal),
QString("sqrt"), 42, 9.7);Wenn der Slot „compute“ nicht genau ein ` QString`, ein ` int` und ein ` double ` in der angegebenen Reihenfolge entgegennimmt, schlägt der Aufruf fehl. Beachten Sie, dass es notwendig war, den Typ von ` QString` explizit anzugeben, da das Zeichenliteral nicht genau dem passenden Typ entspricht. Würde die Methode stattdessen einen ` QStringView`, einen ` qsizetype` und einen ` float` erwarten, müsste der Aufruf wie folgt geschrieben werden:
QString retVal;
QMetaObject::invokeMethod(obj, "compute", Qt::DirectConnection,
qReturnArg(retVal),
QStringView(u"sqrt"), qsizetype(42), 9.7f);Der gleiche Aufruf kann mithilfe der Makros ` Q_ARG()` und ` Q_RETURN_ARG()` ausgeführt werden, wie in:
QString retVal;
QMetaObject::invokeMethod(obj, "compute", Qt::DirectConnection,
Q_RETURN_ARG(QString, retVal),
Q_ARG(QString, "sqrt"),
Q_ARG(int, 42),
Q_ARG(double, 9.7));Die Makros werden aus Gründen der Kompatibilität mit Qt 6.4 und früheren Versionen beibehalten und können beliebig mit Parametern kombiniert werden, die das Makro nicht verwenden. Sie können in seltenen Fällen erforderlich sein, wenn eine Methode aufgerufen wird, die einen mittels `typedef` vorerklärten Typ als Parameter oder Rückgabetyp verwendet.
Hinweis: Diese Funktion ist threadsicher.
Diese Funktionen wurden in Qt 6.5 eingeführt.
Siehe auch „ Q_ARG()“, „ Q_RETURN_ARG()“ und „ QMetaMethod::invoke()“.
[since 6.2] QMetaType QMetaObject::metaType() const
Gibt den diesem Metaobjekt entsprechenden Metatyp zurück. Stammt das Metaobjekt aus einem Namensraum, wird ein ungültiger Metatyp zurückgegeben.
Diese Funktion wurde in Qt 6.2 eingeführt.
QMetaMethod QMetaObject::method(int index) const
Gibt die Metadaten für die Methode mit dem angegebenen index zurück.
Siehe auch methodCount(), methodOffset() und indexOfMethod().
int QMetaObject::methodCount() const
Gibt die Anzahl der Methoden in dieser Klasse zurück, einschließlich der Anzahl der von jeder Basisklasse bereitgestellten Methoden. Dazu gehören Signale und Slots sowie normale Mitgliedsfunktionen.
Verwenden Sie Code wie den folgenden, um ein ` QStringList ` zu erhalten, das die für eine bestimmte Klasse spezifischen Methoden enthält:
const QMetaObject* metaObject = obj->metaObject();
QStringList methods;
for (int i = metaObject->methodOffset(); i < metaObject->methodCount(); ++i)
methods << QString::fromLatin1(metaObject->method(i).methodSignature());Siehe auch ` method()`, ` methodOffset()` und ` indexOfMethod()`.
int QMetaObject::methodOffset() const
Gibt den Methoden-Offset für diese Klasse zurück, d. h. die Indexposition der ersten Mitgliedsfunktion dieser Klasse.
Der Offset ist die Summe aller Methoden in den Oberklassen der Klasse (die immer positiv ist, da „ QObject “ über den Slot „ deleteLater()“ und das Signal „ destroyed()“ verfügt).
Siehe auch „ method()“, „ methodCount()“ und „ indexOfMethod()“.
[since 6.5] template <typename... Args> QObject *QMetaObject::newInstance(Args &&... arguments) const
Erstellt eine neue Instanz dieser Klasse und gibt das neue Objekt zurück oder „ nullptr “, falls kein passender Konstruktor verfügbar ist. Die Typen der Argumente „ arguments “ werden verwendet, um einen passenden Konstruktor zu finden, und anschließend auf dieselbe Weise an diesen weitergeleitet, wie dies bei Signal-Slot-Verbindungen der Fall ist.
Beachten Sie, dass nur Konstruktoren, die mit dem Modifizierer ` Q_INVOKABLE ` deklariert sind, über das Metaobjektsystem verfügbar gemacht werden.
Diese Funktion wurde in Qt 6.5 eingeführt.
Siehe auch ` constructor()`.
[static] QByteArray QMetaObject::normalizedSignature(const char *method)
Normalisiert die Signatur der angegebenen „ method “.
Qt verwendet normalisierte Signaturen, um zu entscheiden, ob zwei angegebene Signale und Slots kompatibel sind. Bei der Normalisierung werden Leerzeichen auf ein Minimum reduziert, „const“ wird gegebenenfalls an den Anfang verschoben, „const“ wird aus Werttypen entfernt und „const“-Referenzen werden durch Werte ersetzt.
Siehe auch ` checkConnectArgs()` und ` normalizedType()`.
[static] QByteArray QMetaObject::normalizedType(const char *type)
Normalisiert ein ` type`.
Eine Beschreibung der Normalisierung durch Qt XML finden Sie unter QMetaObject::normalizedSignature().
Beispiel:
QByteArray normType = QMetaObject::normalizedType(" int const *");
// normType is now "const int*"Siehe auch ` normalizedSignature()`.
QMetaProperty QMetaObject::property(int index) const
Gibt die Metadaten für die Eigenschaft mit dem angegebenen index zurück. Falls keine solche Eigenschaft existiert, wird ein null- QMetaProperty zurückgegeben.
Siehe auch propertyCount(), propertyOffset() und indexOfProperty().
int QMetaObject::propertyCount() const
Gibt die Anzahl der Eigenschaften dieser Klasse zurück, einschließlich der Anzahl der Eigenschaften, die von jeder Basisklasse bereitgestellt werden.
Verwenden Sie Code wie den folgenden, um ein ` QStringList ` zu erhalten, das die für eine bestimmte Klasse spezifischen Eigenschaften enthält:
const QMetaObject* metaObject = obj->metaObject();
QStringList properties;
for (int i = metaObject->propertyOffset(); i < metaObject->propertyCount(); ++i)
properties << QString::fromLatin1(metaObject->property(i).name());Siehe auch „ property()“, „ propertyOffset()“ und „ indexOfProperty()“.
int QMetaObject::propertyOffset() const
Gibt den Eigenschaftsoffset für diese Klasse zurück, d. h. die Indexposition der ersten Eigenschaft dieser Klasse.
Der Offset ist die Summe aller Eigenschaften in den Oberklassen der Klasse (die immer positiv ist, da „ QObject “ die Eigenschaft „ objectName “ besitzt).
Siehe auch property(), propertyCount() und indexOfProperty().
const QMetaObject *QMetaObject::superClass() const
Gibt das Metaobjekt der Oberklasse zurück oder „ nullptr “, falls kein solches Objekt vorhanden ist.
Siehe auch className().
QMetaProperty QMetaObject::userProperty() const
Gibt die Eigenschaft zurück, bei der das Flag „ USER “ auf „true“ gesetzt ist.
Siehe auch ` QMetaProperty::isUser()`.
Makro-Dokumentation
QMetaMethodArgument Q_ARG(Type, const Type &value)
Dieses Makro nimmt ein ` Type ` und ein ` value ` dieses Typs entgegen und gibt ein `QMetaMethodArgument` zurück, das mit den Argumenten ` Args &&... ` an die Template-Funktion ` QMetaObject::invokeMethod()` übergeben werden kann.
Siehe auch ` Q_RETURN_ARG()`.
QMetaMethodReturnArgument Q_RETURN_ARG(Type, Type &value)
Dieses Makro nimmt ein ` Type ` und eine nicht-konstante Referenz auf ein ` value ` dieses Typs entgegen und gibt ein `QMetaMethodReturnArgument` zurück, das mit den Argumenten ` Args &&... ` an die Template-Funktion ` QMetaObject::invokeMethod()` übergeben werden kann.
Siehe auch ` Q_ARG()`.
© 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.