Auf dieser Seite

QMetaMethod Class

Die Klasse „QMetaMethod“ stellt Metadaten zu einer Mitgliedsfunktion bereit. Mehr...

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

Vergleiche von QMetaMethod

KategorieVergleichbare Typen
GleichheitQMetaMethod

Öffentliche Typen

enum Access { Private, Protected, Public }
enum MethodType { Method, Signal, Slot, Constructor }

Öffentliche Funktionen

QMetaMethod::Access access() const
(since 6.5) bool invoke(QObject *obj, Args &&... arguments) const
(since 6.5) bool invoke(QObject *obj, QTemplatedMetaMethodReturnArgument<ReturnArg> ret, Args &&... arguments) const
(since 6.5) bool invoke(QObject *obj, Qt::ConnectionType type, Args &&... arguments) const
(since 6.5) bool invoke(QObject *obj, Qt::ConnectionType type, QTemplatedMetaMethodReturnArgument<ReturnArg> ret, Args &&... arguments) const
(since 6.5) bool invokeOnGadget(void *gadget, Args &&... arguments) const
(since 6.5) bool invokeOnGadget(void *gadget, QTemplatedMetaMethodReturnArgument<ReturnArg> ret, Args &&... arguments) const
(since 6.2) bool isConst() const
bool isValid() const
int methodIndex() const
QByteArray methodSignature() const
QMetaMethod::MethodType methodType() const
QByteArray name() const
(since 6.9) QByteArrayView nameView() const
int parameterCount() const
(since 6.0) QMetaType parameterMetaType(int index) const
QList<QByteArray> parameterNames() const
int parameterType(int index) const
(since 6.0) QByteArray parameterTypeName(int index) const
QList<QByteArray> parameterTypes() const
(since 6.0) int relativeMethodIndex() const
(since 6.0) QMetaType returnMetaType() const
int returnType() const
int revision() const
const char *tag() const
const char *typeName() const

Statische öffentliche Elemente

QMetaMethod fromSignal(PointerToMemberFunction signal)
bool operator!=(const QMetaMethod &lhs, const QMetaMethod &rhs)
bool operator==(const QMetaMethod &lhs, const QMetaMethod &rhs)

Makros

Ausführliche Beschreibung

Eine `QMetaMethod` verfügt über einen ` methodType` (), einen ` methodSignature` (), eine Liste von ` parameterTypes` () und ` parameterNames` (), einen `return typeName` (), einen ` tag` () sowie einen ` access` () -Spezifizierer. Mit ` invoke` () können Sie die Methode für ein beliebiges ` QObject` aufrufen.

Siehe auch QMetaObject, QMetaEnum, QMetaProperty und das Qt-Eigenschaftssystem.

Dokumentation zu Mitgliedstypen

enum QMetaMethod::Access

Diese Enumeration beschreibt die Zugriffsebene einer Methode gemäß den in C++ verwendeten Konventionen.

KonstanteWert
QMetaMethod::Private0
QMetaMethod::Protected1
QMetaMethod::Public2

enum QMetaMethod::MethodType

KonstanteWertBeschreibung
QMetaMethod::MethodQMETHOD_CODEDie Funktion ist eine einfache Mitgliedsfunktion.
QMetaMethod::Signal1Die Funktion ist ein Signal.
QMetaMethod::Slot2Die Funktion ist ein Slot.
QMetaMethod::Constructor3Die Funktion ist ein Konstruktor.

Dokumentation zur Mitgliedsfunktion

QMetaMethod::Access QMetaMethod::access() const

Gibt die Zugriffsspecifikation dieser Methode zurück (private, protected oder public).

Hinweis: Signale sind immer öffentlich, aber Sie sollten dies als Implementierungsdetail betrachten. Es ist fast immer eine schlechte Idee, ein Signal von außerhalb der Klasse aus auszulösen.

Siehe auch ` methodType()`.

[static] template <typename PointerToMemberFunction> QMetaMethod QMetaMethod::fromSignal(PointerToMemberFunction signal)

Gibt die Metamethode zurück, die dem angegebenen ` signal` entspricht, oder einen ungültigen ` QMetaMethod `, falls ` signal ` ` nullptr ` ist oder kein Signal der Klasse darstellt.

Beispiel:

QMetaMethod destroyedSignal = QMetaMethod::fromSignal(&QObject::destroyed);

[since 6.5] template <typename... Args> bool QMetaMethod::invoke(QObject *obj, Args &&... arguments) const

[since 6.5] template <typename ReturnArg, typename... Args> bool QMetaMethod::invoke(QObject *obj, QTemplatedMetaMethodReturnArgument<ReturnArg> ret, Args &&... arguments) const

[since 6.5] template <typename... Args> bool QMetaMethod::invoke(QObject *obj, Qt::ConnectionType type, Args &&... arguments) const

[since 6.5] template <typename ReturnArg, typename... Args> bool QMetaMethod::invoke(QObject *obj, Qt::ConnectionType type, QTemplatedMetaMethodReturnArgument<ReturnArg> ret, Args &&... arguments) const

Ruft diese Methode für das Objekt ` object` auf. Gibt ` true ` zurück, wenn das Element aufgerufen werden konnte. Gibt ` false ` zurück, wenn kein solches Element vorhanden ist oder die Parameter nicht übereinstimmen.

Bei den Überladungen mit einem `QTemplatedMetaMethodReturnArgument`-Parameter wird der Rückgabewert des Funktionsaufrufs ` member ` in ` ret` gespeichert. Bei den Überladungen ohne ein solches Mitglied 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 ` ` 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.

So rufen Sie den Slot „ animateClick()“ auf einem „ QPushButton “ asynchron auf:

int methodIndex = pushButton->metaObject()->indexOfMethod("animateClick()");
QMetaMethod method = metaObject->method(methodIndex);
method.invoke(pushButton, 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. Außerdem ist es nicht möglich, asynchrone Aufrufe durchzuführen, die Referenzen auf nicht als `const` qualifizierte Typen als Parameter verwenden.

Um den Slot „ compute(QString, int, double) “ synchron für ein beliebiges Objekt „ obj “ aufzurufen und dessen Rückgabewert abzurufen:

QString retVal;
QByteArray normalizedSignature = QMetaObject::normalizedSignature("compute(QString, int, double)");
int methodIndex = obj->metaObject()->indexOfMethod(normalizedSignature);
QMetaMethod method = obj->metaObject()->method(methodIndex);
method.invoke(obj, 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 akzeptiert, schlägt der Aufruf fehl. Beachten Sie, dass der Typ von „ QString “ explizit angegeben werden musste, da das Zeichenliteral nicht genau dem passenden Typ entspricht. Würde die Methode stattdessen einen „ QByteArray “, einen „ qint64 “ und einen „ long double “ erwarten, müsste der Aufruf wie folgt geschrieben werden:

QString retVal;
QByteArray normalizedSignature = QMetaObject::normalizedSignature("compute(QByteArray, qint64, long double)");
int methodIndex = obj->metaObject()->indexOfMethod(normalizedSignature);
QMetaMethod method = obj->metaObject()->method(methodIndex);
method.invoke(obj, Qt::DirectConnection, qReturnArg(retVal),
              QByteArray("sqrt"), qint64(42), 9.7L);

Der gleiche Aufruf kann mithilfe der Makros „ Q_ARG()“ und „ Q_RETURN_ARG()“ ausgeführt werden, wie in:

QString retVal;
QByteArray normalizedSignature = QMetaObject::normalizedSignature("compute(QString, int, double)");
int methodIndex = obj->metaObject()->indexOfMethod(normalizedSignature);
QMetaMethod method = obj->metaObject()->method(methodIndex);
method.invoke(obj,
              Qt::DirectConnection,
              Q_RETURN_ARG(QString, retVal),
              Q_ARG(QString, "sqrt"),
              Q_ARG(int, 42),
              Q_ARG(double, 9.7));

Warnung: Bei dieser Methode wird die Gültigkeit der Argumente nicht überprüft: ` object ` muss eine Instanz der Klasse sein, aus der der ` QMetaObject ` konstruiert wurde, mit dem dieser ` QMetaMethod ` erstellt wurde.

Diese Funktionen wurden in Qt 6.5 eingeführt.

Siehe auch „ Q_ARG()“, „ Q_RETURN_ARG()“, „ qRegisterMetaType()“ und „ QMetaObject::invokeMethod()“.

[since 6.5] template <typename... Args> bool QMetaMethod::invokeOnGadget(void *gadget, Args &&... arguments) const

[since 6.5] template <typename ReturnArg, typename... Args> bool QMetaMethod::invokeOnGadget(void *gadget, QTemplatedMetaMethodReturnArgument<ReturnArg> ret, Args &&... arguments) const

Ruft diese Methode für ein ` Q_GADGET` auf. Gibt ` true ` zurück, wenn das Mitglied aufgerufen werden konnte. Gibt ` false ` zurück, wenn kein solches Mitglied vorhanden ist oder die Parameter nicht übereinstimmen.

Der Zeiger ` gadget ` muss auf eine Instanz der Gadget-Klasse zeigen.

Der Aufruf erfolgt immer synchron.

Bei der Überladung mit einem „QTemplatedMetaMethodReturnArgument“-Parameter wird der Rückgabewert des Funktionsaufrufs „ member “ in „ ret “ gespeichert. Bei der Überladung ohne diesen Parameter 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()`.

Warnung: Diese Methode prüft nicht die Gültigkeit der Argumente: ` gadget ` muss eine Instanz der Klasse von ` QMetaObject ` sein, mit der diese ` QMetaMethod ` erstellt wurde.

Diese Funktionen wurden in Qt 6.5 eingeführt.

Siehe auch Q_ARG(), Q_RETURN_ARG(), qRegisterMetaType() und QMetaObject::invokeMethod().

[since 6.2] bool QMetaMethod::isConst() const

Gibt zurück, ob die Methode als „const“ deklariert ist.

Hinweis: Diese Methode gibt möglicherweise fälschlicherweise „ false “ für eine „const“-Methode zurück, wenn diese zu einer Bibliothek gehört, die gegen eine ältere Version von Qt kompiliert wurde.

Diese Funktion wurde in Qt 6.2 eingeführt.

bool QMetaMethod::isValid() const

Gibt „ true “ zurück, wenn diese Methode gültig ist (kann introspiziert und aufgerufen werden), andernfalls wird „ false “ zurückgegeben.

int QMetaMethod::methodIndex() const

Gibt den Index dieser Methode zurück.

QByteArray QMetaMethod::methodSignature() const

Gibt die Signatur dieser Methode zurück (z. B. setValue(double)).

Siehe auch parameterTypes() und parameterNames().

QMetaMethod::MethodType QMetaMethod::methodType() const

Gibt den Typ dieser Methode zurück (Signal, Slot oder Methode).

Siehe auch „ access()“.

QByteArray QMetaMethod::name() const

Gibt den Namen dieser Methode zurück.

Siehe auch methodSignature() und parameterCount().

[since 6.9] QByteArrayView QMetaMethod::nameView() const

Gibt den Namen dieser Methode zurück. Das zurückgegebene ` QByteArrayView ` ist gültig, solange das Metaobjekt der Klasse, zu der die Methode gehört, gültig ist.

Diese Funktion wurde in Qt 6.9 eingeführt.

Siehe auch ` name`.

int QMetaMethod::parameterCount() const

Gibt die Anzahl der Parameter dieser Methode zurück.

Siehe auch „ parameterType()“ und „ parameterNames()“.

[since 6.0] QMetaType QMetaMethod::parameterMetaType(int index) const

Gibt den Metatyp des Parameters unter der angegebenen Adresse index zurück.

Ist der ` index ` kleiner als Null oder größer als ` parameterCount()`, wird ein ungültiger ` QMetaType ` zurückgegeben.

Diese Funktion wurde in Qt 6.0 eingeführt.

Siehe auch parameterCount(), returnMetaType() und QMetaType.

QList<QByteArray> QMetaMethod::parameterNames() const

Gibt eine Liste mit Parameternamen zurück.

Siehe auch parameterTypes() und methodSignature().

int QMetaMethod::parameterType(int index) const

Gibt den Typ des Parameters unter der angegebenen Adresse index zurück.

Der Rückgabewert ist einer der bei ` QMetaType` registrierten Typen oder ` QMetaType::UnknownType `, falls der Typ nicht registriert ist.

Siehe auch parameterCount(), parameterMetaType(), returnType() und QMetaType.

[since 6.0] QByteArray QMetaMethod::parameterTypeName(int index) const

Gibt den Namen des Typs an der Position „ index “ zurück. Befindet sich an der Position „ index “ kein Parameter, wird ein leeres QByteArray

Diese Funktion wurde in Qt 6.0 eingeführt.

Siehe auch parameterNames().

QList<QByteArray> QMetaMethod::parameterTypes() const

Gibt eine Liste der Parametertypen zurück.

Siehe auch parameterNames() und methodSignature().

[since 6.0] int QMetaMethod::relativeMethodIndex() const

Gibt den lokalen Index dieser Methode zurück.

Diese Funktion wurde in Qt 6.0 eingeführt.

[since 6.0] QMetaType QMetaMethod::returnMetaType() const

Gibt den Rückgabetyp dieser Methode zurück.

Diese Funktion wurde in Qt 6.0 eingeführt.

Siehe auch „ parameterMetaType()“, „ QMetaType “ und „ typeName()“.

int QMetaMethod::returnType() const

Gibt den Rückgabetyp dieser Methode zurück.

Der Rückgabewert ist einer der Typen, die unter QMetaType registriert sind, oder QMetaType::UnknownType, falls der Typ nicht registriert ist.

Siehe auch parameterType(), QMetaType, typeName() und returnMetaType().

int QMetaMethod::revision() const

Gibt die Methodenrevision zurück, sofern eine solche über ` Q_REVISION` angegeben wurde; andernfalls wird 0 zurückgegeben. Seit Qt 6.0 werden Werte ungleich Null kodiert und können mit ` QTypeRevision::fromEncodedVersion()` dekodiert werden.

const char *QMetaMethod::tag() const

Gibt das dieser Methode zugeordnete Tag zurück.

Tags sind spezielle Makros, die von moc erkannt werden und es ermöglichen, zusätzliche Informationen zu einer Methode hinzuzufügen.

Tag-Informationen können auf folgende Weise in die Funktionsdeklaration eingefügt werden:

    // In the class MainWindow declaration
    #ifndef Q_MOC_RUN
    // define the tag text as empty, so the compiler doesn't see it
    #  define MY_CUSTOM_TAG
    #endif
    //...
    private slots:
        MY_CUSTOM_TAG void testFunc();

und auf die Informationen kann wie folgt zugegriffen werden:

    MainWindow win;
    win.show();

    int functionIndex = win.metaObject()->indexOfSlot("testFunc()");
    QMetaMethod mm = win.metaObject()->method(functionIndex);
    qDebug() << mm.tag(); // prints MY_CUSTOM_TAG

Derzeit extrahiert und protokolliert „ moc “ zwar alle Tags, behandelt diese jedoch nicht auf besondere Weise. Sie können die Tags verwenden, um Ihre Methoden unterschiedlich zu kennzeichnen, und sie entsprechend den spezifischen Anforderungen Ihrer Anwendung behandeln.

Hinweis: „ moc “ expandiert Präprozessor-Makros, daher ist es notwendig, die Definition mit „ #ifndef “ und „ Q_MOC_RUN “ zu umschließen, wie im obigen Beispiel gezeigt.

const char *QMetaMethod::typeName() const

Gibt den Namen des Rückgabetyps dieser Methode zurück. Handelt es sich bei dieser Methode um einen Konstruktor, gibt diese Funktion eine leere Zeichenkette zurück (Konstruktoren haben keinen Rückgabetyp).

Hinweis: In Qt 7 gibt diese Funktion für Konstruktoren einen Nullzeiger zurück.

Siehe auch „ returnType()“ und „ QMetaType::name()“.

Verwandte Nicht-Mitglieder

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

Gibt „ true “ zurück, wenn die Methode „ lhs “ nicht mit der Methode „ rhs “ übereinstimmt; andernfalls wird „ false “ zurückgegeben.

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

Gibt „ true “ zurück, wenn die Methode „ lhs “ mit der Methode „ rhs “ übereinstimmt; andernfalls wird „ false “ zurückgegeben.

Makro-Dokumentation

[until 6.13] Q_METAMETHOD_INVOKE_MAX_ARGS

Dieses Makro wird in Version 6.13 als veraltet markiert.

Entspricht der maximalen Anzahl von Argumenten, die für die Ausführung der Methode über die alte Implementierung von ` QMetaMethod::invoke()` zur Verfügung stehen. Die neue Implementierung (seit Qt 6.5) verwendet variadische Argumente und kennt keine Obergrenze.

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