Spec-Zone.ru › Qt 5.9

Класс QMetaMethod

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

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

Открытые типы

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

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

Access access() const
bool invoke(QObject *object, Qt::ConnectionType connectionType, QGenericReturnArgument returnValue, QGenericArgument val0 = QGenericArgument( Q_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( Q_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, Qt::ConnectionType connectionType, QGenericArgument val0 = QGenericArgument( Q_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, QGenericArgument val0 = QGenericArgument( Q_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, QGenericReturnArgument returnValue, QGenericArgument val0 = QGenericArgument( Q_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( Q_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 isValid() const
int methodIndex() const
QByteArray methodSignature() const
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 предоставляет метаданные о член-функции.

Объект QMetaMethod имеет methodType(), methodSignature(), список parameterTypes() и parameterNames(), возвращаемый typeName(), tag() и спецификатор access(). Можно использовать invoke() для вызова метода на произвольном объекте QObject.

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

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

enum QMetaMethod::Access

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

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

enum QMetaMethod::MethodType

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

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

Access QMetaMethod::access() const

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

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

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

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

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

Пример:

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

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

bool QMetaMethod::invoke(QObject *object, Qt::ConnectionType connectionType, QGenericReturnArgument returnValue, QGenericArgument val0 = QGenericArgument( Q_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, одно целое число и одно double в указанном порядке, вызов завершится неудачей.

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

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

bool QMetaMethod::invoke(QObject *object, QGenericReturnArgument returnValue, QGenericArgument val0 = QGenericArgument( Q_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

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

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

bool QMetaMethod::invoke(QObject *object, Qt::ConnectionType connectionType, QGenericArgument val0 = QGenericArgument( Q_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

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

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

bool QMetaMethod::invoke(QObject *object, QGenericArgument val0 = QGenericArgument( Q_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

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

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

bool QMetaMethod::invokeOnGadget(void *gadget, QGenericReturnArgument returnValue, QGenericArgument val0 = QGenericArgument( Q_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( Q_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

Это перегруженный метод.

Этот перегруз вызывает этот метод для 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().

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.9/qmetamethod.html

Spec-Zone.ru

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