Spec-Zone.ru › Qt

Структура QMetaObject

Класс QMetaObject содержит метаинформацию об объектах Qt. Подробнее...

Заголовок: #include <QMetaObject>
CMake: find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
  • Список всех членов, включая унаследованные

Открытые типы

класс Связь

Открытые функции

QMetaClassInfo classInfo(int index) const
int количествоClassInfo() const
int смещениеClassInfo() const
const char * имяКласса() const
QMetaMethod конструктор(int index) const
int количествоКонструкторов() const
QMetaEnum перечислитель(int index) const
int количествоПеречислителей() const
int смещениеПеречислителей() const
int индексClassInfo(const char *name) const
int индексКонструктора(const char *constructor) const
int индексПеречислителя(const char *name) const
int индексМетода(const char *method) const
int индексСвойства(const char *name) const
int индексСигнала(const char *signal) const
int индексСлота(const char *slot) const
bool наследуется(const QMetaObject *metaObject) const
QMetaType метаТип() const
QMetaMethod метод(int index) const
int количествоМетодов() const
int смещениеМетодов() const
QObject * создатьЭкземпляр(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 свойство(int index) const
int количествоСвойств() const
int смещениеСвойств() const
const QMetaObject * предок() const
QMetaProperty пользовательскоеСвойство() const

Статические открытые члены

bool проверкаАргументовПодключения(const char *signal, const char *method)
bool проверкаАргументовПодключения(const QMetaMethod &signal, const QMetaMethod &method)
void подключитьСлотыПоИмени(QObject *object)
bool вызватьМетод(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())
bool вызватьМетод(QObject *obj, const char *member, QGenericReturnArgument ret, QGenericArgument val0 = QGenericArgument(0), 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 вызватьМетод(QObject *obj, const char *member, Qt::ConnectionType type, QGenericArgument val0 = QGenericArgument(0), 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 вызватьМетод(QObject *obj, const char *member, QGenericArgument val0 = QGenericArgument(0), 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 вызватьМетод(QObject *context, Functor function, Qt::ConnectionType type = Qt::AutoConnection, FunctorReturnType *ret = nullptr)
bool вызватьМетод(QObject *context, Functor function, FunctorReturnType *ret)
QByteArray нормализованнаяПодпись(const char *method)
QByteArray нормализованныйТип(const char *type)

Макросы

QGenericArgument Q_ARG(Type, const Type &value)
QGenericReturnArgument Q_RETURN_ARG(Type, Type &value)

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

Система метаобъектов 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().

Примечание: Операции, использующие систему метаобъектов, обычно потокобезопасны, поскольку QMetaObjects обычно являются статическими экземплярами для чтения, которые генерируются во время компиляции. Однако, если метаобъекты динамически изменяются приложением (например, при использовании QQmlPropertyMap), приложение должно явно синхронизировать доступ к соответствующему метаобъекту.

См. также QMetaClassInfo, QMetaEnum, QMetaMethod, QMetaProperty, QMetaType и систему метаобъектов.

Документация по функциям-членам

[static] bool QMetaObject::checkConnectArgs(const char *signal, const char *method)

Возвращает true если аргументы signal и method совместимы; в противном случае возвращает false.

Оба аргумента signal и method ожидают быть нормализованными.

См. также normalizedSignature().

[static, since 5.0] bool QMetaObject::checkConnectArgs(const QMetaMethod &signal, const QMetaMethod &method)

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

Возвращает true если аргументы signal и method совместимы; в противном случае возвращает false.

Эта функция была добавлена в Qt 5.0.

QMetaClassInfo QMetaObject::classInfo(int index) const

Возвращает метаданные для элемента информации о классе с заданным индексом.

Пример:

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

Возвращает метаданные для конструктора с заданным индексом.

См. также constructorCount() и newInstance().

int QMetaObject::constructorCount() const

Возвращает количество конструкторов в этом классе.

См. также constructor() и indexOfConstructor().

QMetaEnum QMetaObject::enumerator(int index) const

Возвращает метаданные для перечисления с заданным индексом.

См. также 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().

См. также 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().

См. также метод(), 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().

[since 5.7] 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(0), 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(0), 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(0), 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, since 5.10] template <typename Functor, typename FunctorReturnType> 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, since 5.10] template <typename Functor, typename FunctorReturnType> bool QMetaObject::invokeMethod(QObject *context, Functor function, FunctorReturnType *ret)

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

Вызывает function в цикле событий context, используя тип соединения Qt::AutoConnection. function может быть функтором или указателем на член-функцию. Возвращает true если функция была вызвана. Возвращает false если такого члена нет или параметры не соответствуют. Возвращаемое значение вызова функции помещается в ret.

Примечание: Эта функция является безопасной для потоков.

Эта функция была добавлена в Qt 5.10.

[since 6.2] QMetaType QMetaObject::metaType() const

Возвращает метатип, соответствующий этому метаобъекту. Если метаобъект происходит из пространства имен, возвращается недопустимый метатип.

Эта функция была добавлена в Qt 6.2.

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) в конструктор. Возвращает новый объект или nullptr если подходящий конструктор не найден.

Обратите внимание, что только конструкторы, объявленные с модификатором Q_INVOKABLE, становятся доступными через систему метаобъектов.

См. также 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*"

См. также 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

Возвращает метаобъект родительского класса или nullptr если такого объекта нет.

См. также className().

QMetaProperty QMetaObject::userProperty() const

Возвращает свойство, у которого установлен флаг USER в значение true.

См. также QMetaProperty::isUser().

Документация макросов

QGenericArgument Q_ARG(Type, const Type &value)

Этот макрос принимает Type и значение этого типа и возвращает объект QGenericArgument, который можно передать в QMetaObject::invokeMethod().

См. также Q_RETURN_ARG().

QGenericReturnArgument Q_RETURN_ARG(Type, Type &value)

Этот макрос принимает Type и ссылку на значение этого типа (без const) и возвращает объект QGenericReturnArgument, который можно передать в QMetaObject::invokeMethod().

См. также Q_ARG().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qmetaobject.html

Spec-Zone.ru

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