Spec-Zone.ru › Qt 5.6

Класс 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
QMetaMethod method(int index) const
int methodCount() const
int methodOffset() const
QObject * newInstance(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
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( 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())

Макросы

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

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

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

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

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

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

END_OF_DOCUMENT_MARKER

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

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

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

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

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

Вызывает 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( 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())

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

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

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

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

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

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

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

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

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

Создаёт новый экземпляр этого класса. Вы можете передать до десяти аргументов (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

Возвращает метаданные для свойства с данным индексом. Если такого свойства не существует, возвращается нулевое 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/archives/qt-5.6/qmetaobject.html

Spec-Zone.ru

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