Spec-Zone.ru › Qt 6.0

Класс QMetaMethod

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

Заголовок: #include <QMetaMethod>
CMake: find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
  • Список всех членов, включая унаследованные

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

Перечисление Доступ { Приватный, Защищенный, Публичный }
Перечисление ТипМетода { Метод, Сигнал, Слота, Конструктор }

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

QMetaMethod::Доступ доступ() const
bool вызвать(QObject *объект, Qt::ConnectionType типСвязи, QGenericReturnArgument возвращаемоеЗначение, QGenericArgument арг0 = QGenericArgument(nullptr), QGenericArgument арг1 = QGenericArgument(), QGenericArgument арг2 = QGenericArgument(), QGenericArgument арг3 = QGenericArgument(), QGenericArgument арг4 = QGenericArgument(), QGenericArgument арг5 = QGenericArgument(), QGenericArgument арг6 = QGenericArgument(), QGenericArgument арг7 = QGenericArgument(), QGenericArgument арг8 = QGenericArgument(), QGenericArgument арг9 = QGenericArgument()) const
bool вызвать(QObject *объект, QGenericReturnArgument возвращаемоеЗначение, QGenericArgument арг0 = QGenericArgument(0), QGenericArgument арг1 = QGenericArgument(), QGenericArgument арг2 = QGenericArgument(), QGenericArgument арг3 = QGenericArgument(), QGenericArgument арг4 = QGenericArgument(), QGenericArgument арг5 = QGenericArgument(), QGenericArgument арг6 = QGenericArgument(), QGenericArgument арг7 = QGenericArgument(), QGenericArgument арг8 = QGenericArgument(), QGenericArgument арг9 = QGenericArgument()) const
bool вызвать(QObject *объект, Qt::ConnectionType типСвязи, QGenericArgument арг0 = QGenericArgument(0), QGenericArgument арг1 = QGenericArgument(), QGenericArgument арг2 = QGenericArgument(), QGenericArgument арг3 = QGenericArgument(), QGenericArgument арг4 = QGenericArgument(), QGenericArgument арг5 = QGenericArgument(), QGenericArgument арг6 = QGenericArgument(), QGenericArgument арг7 = QGenericArgument(), QGenericArgument арг8 = QGenericArgument(), QGenericArgument арг9 = QGenericArgument()) const
bool вызвать(QObject *объект, QGenericArgument арг0 = QGenericArgument(0), QGenericArgument арг1 = QGenericArgument(), QGenericArgument арг2 = QGenericArgument(), QGenericArgument арг3 = QGenericArgument(), QGenericArgument арг4 = QGenericArgument(), QGenericArgument арг5 = QGenericArgument(), QGenericArgument арг6 = QGenericArgument(), QGenericArgument арг7 = QGenericArgument(), QGenericArgument арг8 = QGenericArgument(), QGenericArgument арг9 = QGenericArgument()) const
bool вызватьВГаджете(void *гаджет, QGenericReturnArgument возвращаемоеЗначение, QGenericArgument арг0 = QGenericArgument(nullptr), QGenericArgument арг1 = QGenericArgument(), QGenericArgument арг2 = QGenericArgument(), QGenericArgument арг3 = QGenericArgument(), QGenericArgument арг4 = QGenericArgument(), QGenericArgument арг5 = QGenericArgument(), QGenericArgument арг6 = QGenericArgument(), QGenericArgument арг7 = QGenericArgument(), QGenericArgument арг8 = QGenericArgument(), QGenericArgument арг9 = QGenericArgument()) const
bool вызватьВГаджете(void *гаджет, QGenericArgument арг0 = QGenericArgument(0), QGenericArgument арг1 = QGenericArgument(), QGenericArgument арг2 = QGenericArgument(), QGenericArgument арг3 = QGenericArgument(), QGenericArgument арг4 = QGenericArgument(), QGenericArgument арг5 = QGenericArgument(), QGenericArgument арг6 = QGenericArgument(), QGenericArgument арг7 = QGenericArgument(), QGenericArgument арг8 = QGenericArgument(), QGenericArgument арг9 = QGenericArgument()) const
bool действителен() const
int индексМетода() const
QByteArray подписьМетода() const
QMetaMethod::ТипМетода типМетода() const
QByteArray имя() const
int количествоПараметров() const
QMetaType типМетатипаПараметра(int индекс) const
QList<QByteArray> именаПараметров() const
int типПараметра(int индекс) const
QByteArray имяТипаПараметра(int индекс) const
QList<QByteArray> типыПараметров() const
int относительныйИндексМетода() const
QMetaType типМетатипаВозвращаемогоЗначения() const
int типВозвращаемогоЗначения() const
int ревизия() const
const char * тег() const
const char * имяТипа() const

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

QMetaMethod отСигнала(PointerToMemberFunction сигнал)

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

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

Макросы

Q_METAMETHOD_INVOKE_MAX_ARGS

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

QMetaMethod имеет типМетода(), подписьМетода(), список типовПараметров() и именПараметров(), имя возвращаемого типа(), тег() и спецификатор доступа(). Вы можете использовать вызвать() для вызова метода на произвольном QObject.

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

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

Перечисление QMetaMethod::Доступ

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

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

Перечисление QMetaMethod::ТипМетода

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

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

QMetaMethod::Access QMetaMethod::access() const

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

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

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

[static, since 5.0] template <typename PointerToMemberFunction> 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(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(0), 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(0), 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(0), 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 и игнорирует значения возврата.

[since 5.5] 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().

[since 5.5] bool QMetaMethod::invokeOnGadget(void *gadget, QGenericArgument val0 = QGenericArgument(0), 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.

[since 5.0] bool QMetaMethod::isValid() const

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

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

int QMetaMethod::methodIndex() const

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

[since 5.0] QByteArray QMetaMethod::methodSignature() const

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

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

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

QMetaMethod::MethodType QMetaMethod::methodType() const

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

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

[since 5.0] QByteArray QMetaMethod::name() const

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

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

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

[since 5.0] int QMetaMethod::parameterCount() const

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

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

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

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

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

Если index меньше нуля или больше parameterCount(), возвращается недопустимый QMetaType.

Функция была добавлена в Qt 6.0.

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

QList<QByteArray> QMetaMethod::parameterNames() const

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

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

[since 5.0] int QMetaMethod::parameterType(int index) const

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

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

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

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

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

Возвращает имя типа в позиции index. Если параметра в index нет, возвращает пустой QByteArray.

Функция была добавлена в Qt 6.0.

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

QList<QByteArray> QMetaMethod::parameterTypes() const

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

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

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

Возвращает локальный индекс этого метода внутри.

Функция была добавлена в Qt 6.0.

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

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

Функция была добавлена в Qt 6.0.

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

[since 5.0] int QMetaMethod::returnType() const

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

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

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

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

[since 5.1] 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().

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

[since 5.0] bool operator!=(const QMetaMethod &m1, const QMetaMethod &m2)

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

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

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

[since 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-6.0/qmetamethod.html

Spec-Zone.ru

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