Spec-Zone.ru › Qt 5.11

Класс 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)

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

Класс 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 в значение true.

Эта функция была добавлена в 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.11/qmetaobject.html

Spec-Zone.ru

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