Класс 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( 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()) |
| bool | 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()) |
| bool | 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()) |
| bool | 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()) |
| 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. Для каждого подкласса QObject, используемого в приложении, создается один экземпляр QMetaObject, и этот экземпляр хранит все метаданные для подкласса QObject. Этот объект доступен как QObject::metaObject().
END_OF_DOCUMENT_MARKERЭтот класс обычно не требуется для прикладного программирования, но он полезен, если вы пишете мета-приложения, такие как скриптовые движки или визуальные конструкторы.
Функции, которые, скорее всего, окажутся полезными, это:
- 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( 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
Возвращает метаданные свойства с заданным индексом index. Если такое свойство не существует, возвращается null 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.9/qmetaobject.html