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