Spec-Zone.ru › Qt 5.14

Класс QMetaMethod

Класс QMetaMethod предоставляет метаданные о членной функции. Подробнее...

Заголовок: #include <QMetaMethod>
qmake: QT += core
  • Список всех членов, включая унаследованные

Типы

Перечисление Access { Private, Protected, Public }
Перечисление MethodType { Method, Signal, Slot, Constructor }

Открытые функции

QMetaMethod::Access access() const
bool invoke(QObject *object, Qt::ConnectionType connectionType, QGenericReturnArgument returnValue, QGenericArgument val0 = QGenericArgument(nullptr), QGenericArgument val1 = QGenericArgument(), QGenericArgument val2 = QGenericArgument(), QGenericArgument val3 = QGenericArgument(), QGenericArgument val4 = QGenericArgument(), QGenericArgument val5 = QGenericArgument(), QGenericArgument val6 = QGenericArgument(), QGenericArgument val7 = QGenericArgument(), QGenericArgument val8 = QGenericArgument(), QGenericArgument val9 = QGenericArgument()) const
bool invoke(QObject *object, QGenericReturnArgument returnValue, QGenericArgument val0 = ..., QGenericArgument val1 = ..., QGenericArgument val2 = ..., QGenericArgument val3 = ..., QGenericArgument val4 = ..., QGenericArgument val5 = ..., QGenericArgument val6 = ..., QGenericArgument val7 = ..., QGenericArgument val8 = ..., QGenericArgument val9 = ...) const
bool invoke(QObject *object, Qt::ConnectionType connectionType, QGenericArgument val0 = ..., QGenericArgument val1 = ..., QGenericArgument val2 = ..., QGenericArgument val3 = ..., QGenericArgument val4 = ..., QGenericArgument val5 = ..., QGenericArgument val6 = ..., QGenericArgument val7 = ..., QGenericArgument val8 = ..., QGenericArgument val9 = ...) const
bool invoke(QObject *object, QGenericArgument val0 = ..., QGenericArgument val1 = ..., QGenericArgument val2 = ..., QGenericArgument val3 = ..., QGenericArgument val4 = ..., QGenericArgument val5 = ..., QGenericArgument val6 = ..., QGenericArgument val7 = ..., QGenericArgument val8 = ..., QGenericArgument val9 = ...) const
bool invokeOnGadget(void *gadget, QGenericReturnArgument returnValue, QGenericArgument val0 = QGenericArgument(nullptr), QGenericArgument val1 = QGenericArgument(), QGenericArgument val2 = QGenericArgument(), QGenericArgument val3 = QGenericArgument(), QGenericArgument val4 = QGenericArgument(), QGenericArgument val5 = QGenericArgument(), QGenericArgument val6 = QGenericArgument(), QGenericArgument val7 = QGenericArgument(), QGenericArgument val8 = QGenericArgument(), QGenericArgument val9 = QGenericArgument()) const
bool invokeOnGadget(void *gadget, QGenericArgument val0 = ..., QGenericArgument val1 = ..., QGenericArgument val2 = ..., QGenericArgument val3 = ..., QGenericArgument val4 = ..., QGenericArgument val5 = ..., QGenericArgument val6 = ..., QGenericArgument val7 = ..., QGenericArgument val8 = ..., QGenericArgument val9 = ...) const
bool isValid() const
int methodIndex() const
QByteArray methodSignature() const
QMetaMethod::MethodType methodType() const
QByteArray name() const
int parameterCount() const
QList<QByteArray> parameterNames() const
int parameterType(int index) const
QList<QByteArray> parameterTypes() const
int returnType() const
int revision() const
const char * tag() const
const char * typeName() const

Статические открытые члены

QMetaMethod fromSignal(PointerToMemberFunction signal)

Связанные нечлены

bool operator!=(const QMetaMethod &m1, const QMetaMethod &m2)
bool operator==(const QMetaMethod &m1, const QMetaMethod &m2)

Макросы

Q_METAMETHOD_INVOKE_MAX_ARGS

Подробное описание

У QMetaMethod есть methodType(), methodSignature(), список parameterTypes() и parameterNames(), возврат typeName(), tag() и спецификатор доступа access(). Вы можете использовать invoke() для вызова метода на произвольном QObject.

См. также QMetaObject, QMetaEnum, QMetaProperty и Систему свойств Qt.

Документация по типам членов

Перечисление QMetaMethod::Access

Это перечисление описывает уровень доступа к методу, следуя соглашениям, используемым в C++.

Постоянная Значение
QMetaMethod::Private 0
QMetaMethod::Protected 1
QMetaMethod::Public 2

Перечисление QMetaMethod::MethodType

Постоянная Значение Описание
QMetaMethod::Method 0 Функция — обычная членная функция.
QMetaMethod::Signal 1 Функция — сигнал.
QMetaMethod::Slot 2 Функция — слот.
QMetaMethod::Constructor 3 Функция — конструктор.

Документация по документации функций членов

QMetaMethod::Access QMetaMethod::access() const

Возвращает спецификацию доступа к этому методу (private, protected или public).

Примечание: Сигналы всегда public, но это следует рассматривать как деталь реализации. Почти всегда плохая идея отправлять сигнал извне своего класса.

См. также methodType().

[static] QMetaMethod QMetaMethod::fromSignal(PointerToMemberFunction signal)

Возвращает мета-метод, соответствующий заданному сигналу, или недействительный QMetaMethod, если сигнал не является сигналом класса.

Пример:

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

Эта функция была добавлена в Qt 5.0.

bool QMetaMethod::invoke(QObject *object, Qt::ConnectionType connectionType, QGenericReturnArgument returnValue, QGenericArgument val0 = QGenericArgument(nullptr), QGenericArgument val1 = QGenericArgument(), QGenericArgument val2 = QGenericArgument(), QGenericArgument val3 = QGenericArgument(), QGenericArgument val4 = QGenericArgument(), QGenericArgument val5 = QGenericArgument(), QGenericArgument val6 = QGenericArgument(), QGenericArgument val7 = QGenericArgument(), QGenericArgument val8 = QGenericArgument(), QGenericArgument val9 = QGenericArgument()) const

Вызывает этот метод для объекта object. Возвращает true если член можно вызвать. Возвращает false если такого члена нет или параметры не соответствуют.

Вызов может быть синхронным или асинхронным, в зависимости от connectionType:

  • Если connectionType равен Qt::DirectConnection, член будет вызван немедленно.
  • Если connectionType равен Qt::QueuedConnection, будет отправлен QEvent, и член вызывается, как только приложение войдёт в основной цикл обработки событий.
  • Если connectionType равен Qt::AutoConnection, член вызывается синхронно, если object живёт в том же потоке, что и вызывающий код; в противном случае он будет вызван асинхронно.

Значение возврата этого вызова помещается в returnValue. Если вызов асинхронный, значение возврата нельзя получить. Вы можете передать до десяти аргументов (val0, val1, val2, val3, val4, val5, val6, val7, val8 и val9) в этом вызове.

QGenericArgument и QGenericReturnArgument — это внутренние вспомогательные классы. Так как сигналы и слоты могут быть вызваны динамически, вы должны заключать аргументы в макросы Q_ARG() и Q_RETURN_ARG(). Q_ARG() принимает имя типа и константную ссылку на этот тип; Q_RETURN_ARG() принимает имя типа и неконстантную ссылку.

Для асинхронного вызова слота animateClick() для QPushButton:

int methodIndex = pushButton->metaObject()->indexOfMethod("animateClick()");
QMetaMethod method = metaObject->method(methodIndex);
method.invoke(pushButton, Qt::QueuedConnection);

При асинхронных вызовах методов параметры должны быть типов, известных мета-объектной системе Qt, так как Qt нужно скопировать аргументы для их хранения в событии.

QMetaMethod::invoke: Unable to handle unregistered datatype 'MyType'

вызовите qRegisterMetaType(), чтобы зарегистрировать тип данных перед вызовом QMetaMethod::invoke().

Для синхронного вызова слота compute(QString, int, double) на произвольном объекте obj и получения его значения возврата:

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));

QMetaObject::normalizedSignature() используется здесь для обеспечения того, что формат подписи соответствует тому, что ожидает invoke(). Например, удаляются лишние пробелы.

Если слот "compute" не принимает ровно один QString, одно целое число и одно вещественное число в указанном порядке, вызов не удастся.

Предупреждение: этот метод не проверяет корректность аргументов: object должен быть экземпляром класса QMetaObject, с помощью которого был создан этот QMetaMethod. Аргументы должны иметь тот же тип, что и ожидаемые методом, иначе поведение не определено.

См. также Q_ARG(), Q_RETURN_ARG(), qRegisterMetaType() и QMetaObject::invokeMethod().

bool QMetaMethod::invoke(QObject *object, QGenericReturnArgument returnValue, QGenericArgument val0 = ..., QGenericArgument val1 = ..., QGenericArgument val2 = ..., QGenericArgument val3 = ..., QGenericArgument val4 = ..., QGenericArgument val5 = ..., QGenericArgument val6 = ..., QGenericArgument val7 = ..., QGenericArgument val8 = ..., QGenericArgument val9 = ...) const

Эта функция перегружает invoke().

Этот перегруз всегда вызывает этот метод с типом подключения Qt::AutoConnection.

bool QMetaMethod::invoke(QObject *object, Qt::ConnectionType connectionType, QGenericArgument val0 = ..., QGenericArgument val1 = ..., QGenericArgument val2 = ..., QGenericArgument val3 = ..., QGenericArgument val4 = ..., QGenericArgument val5 = ..., QGenericArgument val6 = ..., QGenericArgument val7 = ..., QGenericArgument val8 = ..., QGenericArgument val9 = ...) const

Эта функция перегружает invoke().

Этот перегруз можно использовать, если значение возврата члена не требуется.

bool QMetaMethod::invoke(QObject *object, QGenericArgument val0 = ..., QGenericArgument val1 = ..., QGenericArgument val2 = ..., QGenericArgument val3 = ..., QGenericArgument val4 = ..., QGenericArgument val5 = ..., QGenericArgument val6 = ..., QGenericArgument val7 = ..., QGenericArgument val8 = ..., QGenericArgument val9 = ...) const

Эта функция перегружает invoke().

Этот перегруз вызывает этот метод с типом подключения Qt::AutoConnection и игнорирует значения возврата.

bool QMetaMethod::invokeOnGadget(void *gadget, QGenericReturnArgument returnValue, QGenericArgument val0 = QGenericArgument(nullptr), QGenericArgument val1 = QGenericArgument(), QGenericArgument val2 = QGenericArgument(), QGenericArgument val3 = QGenericArgument(), QGenericArgument val4 = QGenericArgument(), QGenericArgument val5 = QGenericArgument(), QGenericArgument val6 = QGenericArgument(), QGenericArgument val7 = QGenericArgument(), QGenericArgument val8 = QGenericArgument(), QGenericArgument val9 = QGenericArgument()) const

Вызывает этот метод для Q_GADGET. Возвращает true если член можно вызвать. Возвращает false если такого члена нет или параметры не соответствуют.

Указатель gadget должен указывать на экземпляр класса гаджета.

Вызов всегда синхронный.

Значение возврата этого вызова помещается в returnValue. Вы можете передать до десяти аргументов (val0, val1, val2, val3, val4, val5, val6, val7, val8 и val9) в этом вызове.

Предупреждение: этот метод не проверяет корректность аргументов: gadget должен быть экземпляром класса QMetaObject, с помощью которого был создан этот QMetaMethod. Аргументы должны иметь тот же тип, что и ожидаемые методом, иначе поведение не определено.

Эта функция была добавлена в Qt 5.5.

См. также Q_ARG(), Q_RETURN_ARG(), qRegisterMetaType() и QMetaObject::invokeMethod().

bool QMetaMethod::invokeOnGadget(void *gadget, QGenericArgument val0 = ..., QGenericArgument val1 = ..., QGenericArgument val2 = ..., QGenericArgument val3 = ..., QGenericArgument val4 = ..., QGenericArgument val5 = ..., QGenericArgument val6 = ..., QGenericArgument val7 = ..., QGenericArgument val8 = ..., QGenericArgument val9 = ...) const

Это перегруженная функция.

Этот перегруз вызывает этот метод для gadget и игнорирует возвращаемые значения.

Эта функция была добавлена в Qt 5.5.

bool QMetaMethod::isValid() const

Возвращает true, если этот метод валиден (можно инспектировать и вызывать), в противном случае возвращает false.

Эта функция была добавлена в Qt 5.0.

int QMetaMethod::methodIndex() const

Возвращает индекс этого метода.

Эта функция была добавлена в Qt 4.6.

QByteArray QMetaMethod::methodSignature() const

Возвращает сигнатуру этого метода (например, setValue(double)).

Эта функция была добавлена в Qt 5.0.

См. также parameterTypes() и parameterNames().

QMetaMethod::MethodType QMetaMethod::methodType() const

Возвращает тип этого метода (сигнал, слот или метод).

См. также access().

QByteArray QMetaMethod::name() const

Возвращает имя этого метода.

Эта функция была добавлена в Qt 5.0.

См. также methodSignature() и parameterCount().

int QMetaMethod::parameterCount() const

Возвращает количество параметров этого метода.

Эта функция была добавлена в Qt 5.0.

См. также parameterType() и parameterNames().

QList<QByteArray> QMetaMethod::parameterNames() const

Возвращает список имен параметров.

См. также parameterTypes() и methodSignature().

int QMetaMethod::parameterType(int index) const

Возвращает тип параметра по заданному index.

Возвращаемое значение — один из типов, зарегистрированных в QMetaType, или QMetaType::UnknownType, если тип не зарегистрирован.

Эта функция была добавлена в Qt 5.0.

См. также parameterCount(), returnType() и QMetaType.

QList<QByteArray> QMetaMethod::parameterTypes() const

Возвращает список типов параметров.

См. также parameterNames() и methodSignature().

int QMetaMethod::returnType() const

Возвращает тип возвращаемого значения этого метода.

Возвращаемое значение — один из типов, зарегистрированных в QMetaType, или QMetaType::UnknownType, если тип не зарегистрирован.

Эта функция была добавлена в Qt 5.0.

См. также parameterType(), QMetaType и typeName().

int QMetaMethod::revision() const

Возвращает номер ревизии метода, если он был задан с помощью Q_REVISION, в противном случае возвращает 0.

Эта функция была добавлена в Qt 5.1.

const char *QMetaMethod::tag() const

Возвращает тег, связанный с этим методом.

Теги — это специальные макросы, распознаваемые moc для добавления дополнительной информации о методе.

Информация о тегах может быть добавлена в объявление функции следующим образом:

    // 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();

и к информации можно получить доступ, используя:

    MainWindow win;
    win.show();

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

На данный момент moc будет извлекать и записывать все теги, но не будет обрабатывать их специально. Вы можете использовать теги для разного аннотирования методов и обработки их в соответствии со специфическими потребностями вашего приложения.

Примечание: С Qt 5.0 moc расширяет препроцессорные макросы, поэтому необходимо окружать определение #ifndef Q_MOC_RUN, как показано в примере выше. В Qt 4 это не требовалось. Приведенный выше код работает и с Qt 4.

const char *QMetaMethod::typeName() const

Возвращает имя типа возвращаемого значения этого метода.

См. также returnType() и QMetaType::type().

Связанные нечленные функции

bool operator!=(const QMetaMethod &m1, const QMetaMethod &m2)

Это перегруженная функция.

Возвращает true если метод m1 не равен методу m2, в противном случае возвращает false.

Эта функция была добавлена в Qt 5.0.

bool operator==(const QMetaMethod &m1, const QMetaMethod &m2)

Это перегруженная функция.

Возвращает true если метод m1 равен методу m2, в противном случае возвращает false.

Эта функция была добавлена в Qt 5.0.

Документация макросов

Q_METAMETHOD_INVOKE_MAX_ARGS

Равно максимальному числу аргументов, доступных для выполнения метода через QMetaMethod::invoke()

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qmetamethod.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API