Spec-Zone.ru › Qt 5.13

Структура 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

Статические публичные члены

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

Макросы

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

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

Система метаобъектов Qt отвечает за межобъектную коммуникацию посредством сигналов и слотов, динамическую информацию о типах и систему свойств Qt. Для каждого подкласса QObject, используемого в приложении, создаётся экземпляр QMetaObject, который хранит всю метаинформацию об этом подклассе. Этот объект доступен как 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().

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) в конструктор. Возвращает новый объект или nullptr если подходящий конструктор недоступен.

Обратите внимание, что только конструкторы, объявленные с модификатором 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

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

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

QMetaProperty QMetaObject::userProperty() const

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

Данная функция была представлена в Qt 4.2.

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

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

QGenericArgument QMetaObject::Q_ARG(Type, const Type &value)

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

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

QGenericReturnArgument QMetaObject::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.13/qmetaobject.html

Spec-Zone.ru

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