Spec-Zone.ru › Qt 5.12

Класс QMetaObject

Класс QMetaObject содержит метаинформацию о Qt-объектах. Подробнее...

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

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

класс Connection

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

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
QMetaMethod method(int index) const
int methodCount() const
int methodOffset() const
QObject * newInstance(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
QMetaProperty property(int index) const
int propertyCount() const
int propertyOffset() const
const QMetaObject * superClass() const
QMetaProperty userProperty() const

Открытые переменные

структура (анонимная структура в /tmp/snapshot-qt5-5.12-rel/qt5/qtbase/include/QtCore/../../src/corelib/kernel/qobjectdefs.h:575:5) d

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

bool checkConnectArgs(const char *signal, const char *method)
bool checkConnectArgs(const QMetaMethod &signal, const QMetaMethod &method)
void connectSlotsByName(QObject *object)
bool invokeMethod(QObject *obj, const char *member, Qt::ConnectionType type, QGenericReturnArgument ret, 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())
QByteArray normalizedSignature(const char *method)
QByteArray normalizedType(const char *type)

Макросы

QGenericArgument Q_ARG(Type, const Type &value)
QGenericReturnArgument Q_RETURN_ARG(Type, Type &value)

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

Класс QMetaObject содержит метаинформацию о Qt-объектах.

Система метаобъектов Qt в Qt отвечает за механизм межобъектной связи с помощью сигналов и слотов, информацию о типе во время выполнения и систему свойств Qt. Для каждого подкласса QObject, используемого в приложении, создается единственный экземпляр QMetaObject, который хранит всю метаинформацию для этого подкласса QObject. Этот объект доступен как QObject::metaObject().

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

Функции, которые, скорее всего, будут полезны, следующие:

  • className() возвращает имя класса.
  • superClass() возвращает метаобъект суперкласса.
  • method() и methodCount() предоставляют информацию о метаметодах класса (сигналы, слоты и другие вызываемые члены функций).
  • enumerator() и enumeratorCount() предоставляют информацию об перечислениях класса.
  • propertyCount() и property() предоставляют информацию о свойствах класса.
  • constructor() и constructorCount() предоставляют информацию о метаконструкторах класса.

Функции индексирования indexOfConstructor(), indexOfMethod(), indexOfEnumerator() и indexOfProperty() сопоставляют имена конструкторов, членов функций, перечислений или свойств с индексами в метаобъекте. Например, Qt использует indexOfMethod() во внутреннем использовании, когда вы подключаете сигнал к слоту.

Классы также могут иметь список пар «имя-значение» дополнительной информации о классе, хранящейся в объектах QMetaClassInfo. Количество пар возвращается функцией classInfoCount(), отдельные пары возвращаются функцией classInfo(), а вы можете искать пары с помощью indexOfClassInfo().

См. также QMetaClassInfo, QMetaEnum, QMetaMethod, QMetaProperty, QMetaType и Систему метаобъектов.

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

[static] bool QMetaObject::checkConnectArgs(const char *signal, const char *method)

Возвращает true если аргументы signal и method совместимы; в противном случае возвращает false.

Оба аргумента signal и method ожидаются в нормализованном виде.

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

[static] bool QMetaObject::checkConnectArgs(const QMetaMethod &signal, const QMetaMethod &method)

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

Возвращает true если аргументы signal и method совместимы; в противном случае возвращает false.

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

QMetaClassInfo QMetaObject::classInfo(int index) const

Возвращает метаданные для элемента информации о классе с заданным index.

Пример:

class MyClass : public QObject
{
    Q_OBJECT
    Q_CLASSINFO("author", "Sabrina Schweinsteiger")
    Q_CLASSINFO("url", "http://doc.moosesoft.co.uk/1.0/")

public:
    ...
};

См. также classInfoCount(), classInfoOffset() и indexOfClassInfo().

int QMetaObject::classInfoCount() const

Возвращает количество элементов информации о классе в этом классе.

См. также classInfo(), classInfoOffset() и indexOfClassInfo().

int QMetaObject::classInfoOffset() const

Возвращает смещение информации о классе для данного класса; т.е. позицию индекса первого элемента информации о классе в этом классе.

Если класс не имеет суперклассов с информацией о классе, смещение равно 0; в противном случае смещение равно сумме всех элементов информации о классе в суперклассах данного класса.

См. также classInfo(), classInfoCount() и indexOfClassInfo().

const char *QMetaObject::className() const

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

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

[static] void QMetaObject::connectSlotsByName(QObject *object)

Рекурсивно ищет все дочерние объекты данного объекта object и подключает соответствующие сигналы от них к слотам объекта object, которые следуют следующей форме:

void on_<object name>_<signal name>(<signal parameters>);

Предположим, что наш объект имеет дочерний объект типа QPushButton с именем объекта button1. Слотом для обработки сигнала clicked() кнопки будет:

void on_button1_clicked();

Если у самого объекта object должным образом установлено имя объекта, его собственные сигналы также подключаются к соответствующим слотам.

См. также QObject::setObjectName().

QMetaMethod QMetaObject::constructor(int index) const

Возвращает метаданные для конструктора с заданным index.

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

См. также constructorCount() и newInstance().

int QMetaObject::constructorCount() const

Возвращает количество конструкторов в этом классе.

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

См. также constructor() и indexOfConstructor().

QMetaEnum QMetaObject::enumerator(int index) const

Возвращает метаданные для перечисления с заданным index.

См. также enumeratorCount(), enumeratorOffset() и indexOfEnumerator().

int QMetaObject::enumeratorCount() const

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

См. также enumerator(), enumeratorOffset() и indexOfEnumerator().

int QMetaObject::enumeratorOffset() const

Возвращает смещение перечислений для данного класса; т.е. позицию индекса первого перечисления в этом классе.

Если класс не имеет суперклассов с перечислениями, смещение равно 0; в противном случае смещение равно сумме всех перечислений в суперклассах данного класса.

См. также enumerator(), enumeratorCount() и indexOfEnumerator().

int QMetaObject::indexOfClassInfo(const char *name) const

Находит элемент информации о классе с именем name и возвращает его индекс; в противном случае возвращает -1.

См. также classInfo(), classInfoCount() и classInfoOffset().

int QMetaObject::indexOfConstructor(const char *constructor) const

Находит constructor и возвращает его индекс; в противном случае возвращает -1.

Обратите внимание, что constructor должен быть в нормализованной форме, как возвращается функцией normalizedSignature().

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

См. также constructor(), constructorCount() и normalizedSignature().

int QMetaObject::indexOfEnumerator(const char *name) const

Находит перечисление name и возвращает его индекс; в противном случае возвращает -1.

См. также enumerator(), enumeratorCount() и enumeratorOffset().

int QMetaObject::indexOfMethod(const char *method) const

Находит method и возвращает его индекс; в противном случае возвращает -1.

Обратите внимание, что method должен быть в нормализованной форме, как возвращается функцией normalizedSignature().

См. также method(), methodCount(), methodOffset() и normalizedSignature().

int QMetaObject::indexOfProperty(const char *name) const

Находит свойство name и возвращает его индекс; в противном случае возвращает -1.

См. также property(), propertyCount() и propertyOffset().

END_OF_DOCUMENT_MARKER

int QMetaObject::indexOfSignal(const char *signal) const

Находит signal и возвращает его индекс; в противном случае возвращает -1.

Это то же самое, что indexOfMethod(), за исключением того, что вернёт -1, если метод существует, но не является сигналом.

Обратите внимание, что signal должен быть в нормализованной форме, как возвращается normalizedSignature().

См. также indexOfMethod(), normalizedSignature(), method(), methodCount() и methodOffset().

int QMetaObject::indexOfSlot(const char *slot) const

Находит slot и возвращает его индекс; в противном случае возвращает -1.

Это то же самое, что indexOfMethod(), за исключением того, что вернёт -1, если метод существует, но не является слотом.

См. также indexOfMethod(), method(), methodCount() и methodOffset().

bool QMetaObject::inherits(const QMetaObject *metaObject) const

Возвращает true , если класс, описанный этим QMetaObject, наследует тип, описанный metaObject; в противном случае возвращает false.

Тип считается наследующим сам себя.

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

[static] bool QMetaObject::invokeMethod(QObject *obj, const char *member, Qt::ConnectionType type, QGenericReturnArgument ret, 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())

Вызывает member (имя сигнала или слота) на объекте obj. Возвращает true , если член может быть вызван. Возвращает false , если такого члена нет или параметры не соответствуют.

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

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

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

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

Вам нужно передавать только имя сигнала или слота в эту функцию, а не всю сигнатуру. Например, чтобы асинхронно вызвать слот quit() в QThread, используйте следующий код:

QMetaObject::invokeMethod(thread, "quit",
                          Qt::QueuedConnection);

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

QMetaObject::invokeMethod: Unable to handle unregistered datatype 'MyType'

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

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

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

Если слот «compute» не принимает ровно один QString, одно целое число и одно число с плавающей точкой в указанном порядке, вызов завершится ошибкой.

Примечание: Эта функция безопасна для потоков.

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

[static] bool QMetaObject::invokeMethod(QObject *obj, const char *member, QGenericReturnArgument ret, QGenericArgument val0 = ..., QGenericArgument val1 = ..., QGenericArgument val2 = ..., QGenericArgument val3 = ..., QGenericArgument val4 = ..., QGenericArgument val5 = ..., QGenericArgument val6 = ..., QGenericArgument val7 = ..., QGenericArgument val8 = ..., QGenericArgument val9 = ...)

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

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

Примечание: Эта функция безопасна для потоков.

[static] bool QMetaObject::invokeMethod(QObject *obj, const char *member, Qt::ConnectionType type, QGenericArgument val0 = ..., QGenericArgument val1 = ..., QGenericArgument val2 = ..., QGenericArgument val3 = ..., QGenericArgument val4 = ..., QGenericArgument val5 = ..., QGenericArgument val6 = ..., QGenericArgument val7 = ..., QGenericArgument val8 = ..., QGenericArgument val9 = ...)

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

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

Примечание: Эта функция безопасна для потоков.

[static] bool QMetaObject::invokeMethod(QObject *obj, const char *member, QGenericArgument val0 = ..., QGenericArgument val1 = ..., QGenericArgument val2 = ..., QGenericArgument val3 = ..., QGenericArgument val4 = ..., QGenericArgument val5 = ..., QGenericArgument val6 = ..., QGenericArgument val7 = ..., QGenericArgument val8 = ..., QGenericArgument val9 = ...)

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

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

Примечание: Эта функция безопасна для потоков.

[static] bool QMetaObject::invokeMethod(QObject *context, Functor function, Qt::ConnectionType type = Qt::AutoConnection, FunctorReturnType *ret = nullptr)

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

Вызывает function в цикле событий context. function может быть функтором или указателем на член-функцию. Возвращает true если функция была вызвана. Возвращает false если такой функции не существует или параметры не соответствуют. Значение возвращаемого функцией значения помещается в ret.

Примечание: Этот метод является потокобезопасным.

Этот метод был введён в Qt 5.10.

[static] bool QMetaObject::invokeMethod(QObject *context, Functor function, FunctorReturnType *ret)

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

Вызывает function в цикле событий context с типом соединения Qt::AutoConnection. function может быть функтором или указателем на член-функцию. Возвращает true если функция была вызвана. Возвращает false если такого члена или параметров не существует. Значение возвращаемого функцией значения помещается в ret.

Примечание: Этот метод является потокобезопасным.

Этот метод был введён в Qt 5.10.

QMetaMethod QMetaObject::method(int index) const

Возвращает метаданные для метода с заданным index.

См. также methodCount(), methodOffset(), и indexOfMethod().

int QMetaObject::methodCount() const

Возвращает количество методов в этом классе, включая количество методов, предоставляемых каждым базовым классом. Они включают сигналы, слоты и обычные член-функции.

Используйте код, подобный следующему, чтобы получить QStringList, содержащий методы, специфичные для данного класса:

const QMetaObject* metaObject = obj->metaObject();
QStringList methods;
for(int i = metaObject->methodOffset(); i < metaObject->methodCount(); ++i)
    methods << QString::fromLatin1(metaObject->method(i).methodSignature());

См. также method(), methodOffset(), и indexOfMethod().

int QMetaObject::methodOffset() const

Возвращает смещение метода для этого класса; т.е. позицию индекса первой член-функции этого класса.

Смещение — это сумма всех методов в суперклассах класса (которое всегда положительное, так как QObject имеет слот deleteLater() и сигнал destroyed()).

См. также method(), methodCount(), и indexOfMethod().

QObject *QMetaObject::newInstance(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

Создаёт новый экземпляр этого класса. Вы можете передать до десяти аргументов (val0, val1, val2, val3, val4, val5, val6, val7, val8 и val9) в конструктор. Возвращает новый объект или 0, если подходящий конструктор недоступен.

Обратите внимание, что только конструкторы, объявленные с модификатором Q_INVOKABLE, становятся доступными через систему метаобъектов.

Этот метод был введён в Qt 4.5.

См. также Q_ARG() и constructor().

[static] QByteArray QMetaObject::normalizedSignature(const char *method)

Нормализует сигнатуру заданного method.

Qt использует нормализованные сигнатуры, чтобы определить, совместимы ли два заданных сигнала и слоты. Нормализация сводит пробелы к минимуму, перемещает 'const' вперёд, где это уместно, удаляет 'const' из типов значений и заменяет ссылки const на значения.

См. также checkConnectArgs() и normalizedType().

[static] QByteArray QMetaObject::normalizedType(const char *type)

Нормализует type.

См. QMetaObject::normalizedSignature() для описания того, как Qt нормализует.

Пример:

QByteArray normType = QMetaObject::normalizedType(" int    const  *");
// normType is now "const int*"

Этот метод был введён в Qt 4.2.

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

QMetaProperty QMetaObject::property(int index) const

Возвращает метаданные для свойства с заданным index. Если такого свойства не существует, возвращается нулевое QMetaProperty.

См. также propertyCount(), propertyOffset(), и indexOfProperty().

int QMetaObject::propertyCount() const

Возвращает количество свойств в этом классе, включая количество свойств, предоставляемых каждым базовым классом.

Используйте код, подобный следующему, чтобы получить QStringList, содержащий свойства, специфичные для данного класса:

const QMetaObject* metaObject = obj->metaObject();
QStringList properties;
for(int i = metaObject->propertyOffset(); i < metaObject->propertyCount(); ++i)
    properties << QString::fromLatin1(metaObject->property(i).name());

См. также property(), propertyOffset(), и indexOfProperty().

int QMetaObject::propertyOffset() const

Возвращает смещение свойства для этого класса; т.е. позицию индекса первого свойства этого класса.

Смещение — это сумма всех свойств в суперклассах класса (которое всегда положительное, так как QObject имеет свойство name()).

См. также property(), propertyCount(), и indexOfProperty().

const QMetaObject *QMetaObject::superClass() const

Возвращает метаобъект суперкласса или 0, если такого объекта нет.

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

QMetaProperty QMetaObject::userProperty() const

Возвращает свойство, для которого установлен флаг USER.

Этот метод был введён в Qt 4.2.

См. также QMetaProperty::isUser().

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

QGenericArgument Q_ARG(Type, const Type &value)

Этот макрос принимает Type и value этого типа и возвращает объект QGenericArgument, который может быть передан QMetaObject::invokeMethod().

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

QGenericReturnArgument Q_RETURN_ARG(Type, Type &value)

Этот макрос принимает Type и неконстантную ссылку на value этого типа и возвращает объект QGenericReturnArgument, который может быть передан QMetaObject::invokeMethod().

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

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

Spec-Zone.ru

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