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