Spec-Zone.ru › Qt 6.1

Класс QMetaType

Класс QMetaType управляет именованными типами в системе метаобъектов. Подробнее...

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

Примечание: Все функции в этом классе являются потокобезопасными.

Публичные типы

перечисление Тип { Пустое, Булево, Целое, Беззнаковое целое, Двойная точность, …, Неизвестный тип }
перечисление Флаг типа { Требует создания, Требует уничтожения, Перемещаемый тип, Перечисление, Беззнаковое перечисление, …, Указатель }
флаги Флаги типа

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

QMetaType(int typeId)
qsizetype alignOf() const
QPartialOrdering compare(const void *lhs, const void *rhs) const
void * construct(void *where, const void *copy = nullptr) const
void * create(const void *copy = nullptr) const
bool debugStream(QDebug &dbg, const void *rhs)
void destroy(void *data) const
void destruct(void *data) const
bool equals(const void *lhs, const void *rhs) const
QMetaType::TypeFlags flags() const
bool hasRegisteredDataStreamOperators() const
bool hasRegisteredDebugStreamOperator() const
int id() const
bool isEqualityComparable() const
bool isOrdered() const
bool isRegistered() const
bool isValid() const
bool load(QDataStream &stream, void *data) const
const QMetaObject * metaObject() const
const char * name() const
bool save(QDataStream &stream, const void *data) const
qsizetype sizeOf() const

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

bool canConvert(QMetaType fromType, QMetaType toType)
bool canView(QMetaType fromType, QMetaType toType)
bool convert(QMetaType fromType, const void *from, QMetaType toType, void *to)
QMetaType fromName(QByteArrayView typeName)
QMetaType fromType()
bool hasRegisteredConverterFunction(QMetaType fromType, QMetaType toType)
bool hasRegisteredConverterFunction()
bool hasRegisteredMutableViewFunction(QMetaType fromType, QMetaType toType)
bool hasRegisteredMutableViewFunction()
bool isRegistered(int type)
bool registerConverter()
bool registerConverter(MemberFunction function)
bool registerConverter(MemberFunctionOk function)
bool registerConverter(UnaryFunction function)
bool registerMutableView(MemberFunction function)
bool registerMutableView(MemberFunctionOk function)
bool registerMutableView(UnaryFunction function)
bool view(QMetaType fromType, void *from, QMetaType toType, void *to)

Связанные нечлены

int qMetaTypeId()
int qRegisterMetaType(const char *typeName)
int qRegisterMetaType()
bool operator!=(QMetaType a, QMetaType b)
bool operator==(QMetaType a, QMetaType b)

Макросы

Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE(Container)
Q_DECLARE_METATYPE(Type)
Q_DECLARE_OPAQUE_POINTER(PointerType)
Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(Container)
Q_DECLARE_SMART_POINTER_METATYPE(SmartPointer)

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

Класс используется в качестве помощника для маршаллирования типов в QVariant и при подключении сигналов и слотов в очереди. Он связывает имя типа с типом, чтобы его можно было создавать и уничтожать динамически во время выполнения. Объявляйте новые типы с помощью Q_DECLARE_METATYPE(), чтобы сделать их доступными для QVariant и других функций на основе шаблонов. Вызывайте qRegisterMetaType(), чтобы сделать типы доступными для функций, не основанных на шаблонах, таких как подключение сигналов и слотов в очереди.

Любой класс или структура, имеющие публичный конструктор по умолчанию, публичный конструктор копирования и публичный деструктор, может быть зарегистрирован.

Следующий код выделяет и уничтожает экземпляр MyClass:

int id = QMetaType::type("MyClass");
if (id != QMetaType::UnknownType) {
    void *myClassPtr = QMetaType::create(id);
    ...
    QMetaType::destroy(id, myClassPtr);
    myClassPtr = 0;
}

Если мы хотим, чтобы операторы потоков operator<<() и operator>>() работали с объектами QVariant, хранящими пользовательские типы, пользовательский тип должен предоставлять операторы operator<<() и operator>>().

См. также Q_DECLARE_METATYPE(), QVariant::setValue(), QVariant::value() и QVariant::fromValue().

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

перечисление QMetaType::Type

Это встроенные типы, поддерживаемые QMetaType:

Константа Значение Описание
QMetaType::Void 43 void
QMetaType::Bool 1 bool
QMetaType::Int 2 int
QMetaType::UInt 3 unsigned int
QMetaType::Double 6 double
QMetaType::QChar 7 QChar
QMetaType::QString 10 QString
QMetaType::QByteArray 12 QByteArray
QMetaType::Nullptr 51 std::nullptr_t
QMetaType::VoidStar 31 void *
QMetaType::Long 32 long
QMetaType::LongLong 4 LongLong
QMetaType::Short 33 short
QMetaType::Char 34 char
QMetaType::Char16 56 char16_t
QMetaType::Char32 57 char32_t
QMetaType::ULong 35 unsigned long
QMetaType::ULongLong 5 ULongLong
QMetaType::UShort 36 unsigned short
QMetaType::SChar 40 signed char
QMetaType::UChar 37 unsigned char
QMetaType::Float 38 float
QMetaType::QObjectStar 39 QObject *
QMetaType::QVariant 41 QVariant
QMetaType::QCursor 0x100a QCursor
QMetaType::QDate 14 QDate
QMetaType::QSize 21 QSize
QMetaType::QTime 15 QTime
QMetaType::QVariantList 9 QVariantList
QMetaType::QPolygon 0x1007 QPolygon
QMetaType::QPolygonF 0x1016 QPolygonF
QMetaType::QColor 0x1003 QColor
QMetaType::QColorSpace 0x1017 QColorSpace (представлен в Qt 5.15)
QMetaType::QSizeF 22 QSizeF
QMetaType::QRectF 20 QRectF
QMetaType::QLine 23 QLine
QMetaType::QTextLength 0x100d QTextLength
QMetaType::QStringList 11 QStringList
QMetaType::QVariantMap 8 QVariantMap
QMetaType::QVariantHash 28 QVariantHash
QMetaType::QIcon 0x1005 QIcon
QMetaType::QPen 0x100c QPen
QMetaType::QLineF 24 QLineF
QMetaType::QTextFormat 0x100e QTextFormat
QMetaType::QRect 19 QRect
QMetaType::QPoint 25 QPoint
QMetaType::QUrl 17 QUrl
QMetaType::QRegularExpression 44 QRegularExpression
QMetaType::QDateTime 16 QDateTime
QMetaType::QPointF 26 QPointF
QMetaType::QPalette 0x1004 QPalette
QMetaType::QFont 0x1000 QFont
QMetaType::QBrush 0x1002 QBrush
QMetaType::QRegion 0x1008 QRegion
QMetaType::QBitArray 13 QBitArray
QMetaType::QImage 0x1006 QImage
QMetaType::QKeySequence 0x100b QKeySequence
QMetaType::QSizePolicy 0x2000 QSizePolicy
QMetaType::QPixmap 0x1001 QPixmap
QMetaType::QLocale 18 QLocale
QMetaType::QBitmap 0x1009 QBitmap
QMetaType::QTransform 0x1010 QTransform
QMetaType::QMatrix4x4 0x1011 QMatrix4x4
QMetaType::QVector2D 0x1012 QVector2D
QMetaType::QVector3D 0x1013 QVector3D
QMetaType::QVector4D 0x1014 QVector4D
QMetaType::QQuaternion 0x1015 QQuaternion
QMetaType::QEasingCurve 29 QEasingCurve
QMetaType::QJsonValue 45 QJsonValue
QMetaType::QJsonObject 46 QJsonObject
QMetaType::QJsonArray 47 QJsonArray
QMetaType::QJsonDocument 48 QJsonDocument
QMetaType::QCborValue 53 QCborValue
QMetaType::QCborArray 54 QCborArray
QMetaType::QCborMap 55 QCborMap
QMetaType::QCborSimpleType 52 QCborSimpleType
QMetaType::QModelIndex 42 QModelIndex
QMetaType::QPersistentModelIndex 50 QPersistentModelIndex (введено в Qt 5.5)
QMetaType::QUuid 30 QUuid
QMetaType::QByteArrayList 49 QByteArrayList
QMetaType::User 65536 Базовое значение для пользовательских типов
QMetaType::UnknownType 0 Это недействительный идентификатор типа. Он возвращается из QMetaType для типов, которые не зарегистрированы. Дополнительные типы можно зарегистрировать с помощью Q_DECLARE_METATYPE().

См. также type() и typeName().

enum QMetaType::TypeFlagflags QMetaType::TypeFlags

Перечисление описывает атрибуты типа, поддерживаемого QMetaType.

Постоянная Значение Описание
QMetaType::NeedsConstruction 0x1 У этого типа есть конструкторы с нетривиальным поведением. Если флаг не установлен, экземпляры можно безопасно инициализировать с помощью memset в 0.
QMetaType::NeedsDestruction 0x2 У этого типа есть нетривиальный деструктор. Если флаг не установлен, вызовы деструктора не нужны перед удалением объектов.
QMetaType::RelocatableType 0x4 Экземпляр типа, имеющего этот атрибут, можно безопасно перемещать в другое место в памяти с помощью memcpy.
QMetaType::IsEnumeration 0x10 Этот тип является перечислением.
QMetaType::IsUnsignedEnumeration 0x100 Если тип является перечислением, его базовый тип беззнаковый.
QMetaType::PointerToQObject 0x8 Этот тип является указателем на производный от QObject.
QMetaType::IsPointer 0x800 Этот тип является указателем на другой тип.

Тип TypeFlags является псевдонимом для QFlags<TypeFlag>. Он хранит логическое ИЛИ сочетание значений TypeFlag.

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

[since 5.0] QMetaType::QMetaType(int typeId)

Создает объект QMetaType, содержащий всю информацию о типе typeId.

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

[since 6.0] qsizetype QMetaType::alignOf() const

Возвращает выравнивание типа в байтах (т.е. alignof(T), где T — фактический тип, для которого был создан этот экземпляр QMetaType).

Эта функция обычно используется вместе с construct() для выполнения низкоуровневого управления памятью, используемой типом.

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

См. также QMetaType::construct() и QMetaType::sizeOf().

[static] bool QMetaType::canConvert(QMetaType fromType, QMetaType toType)

Возвращает true , если QMetaType::convert может выполнить преобразование из fromType в toType.

Qt поддерживает следующие преобразования:

Тип Автоматически приводится к
QMetaType::Bool QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt, QMetaType::ULongLong
QMetaType::QByteArray QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt, QMetaType::ULongLong, QMetaType::QUuid
QMetaType::QChar QMetaType::Bool, QMetaType::Int, QMetaType::UInt, QMetaType::LongLong, QMetaType::ULongLong
QMetaType::QColor QMetaType::QString
QMetaType::QDate QMetaType::QDateTime, QMetaType::QString
QMetaType::QDateTime QMetaType::QDate, QMetaType::QString, QMetaType::QTime
QMetaType::Double QMetaType::Bool, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt, QMetaType::ULongLong
QMetaType::QFont QMetaType::QString
QMetaType::Int QMetaType::Bool, QMetaType::QChar, QMetaType::Double, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt, QMetaType::ULongLong
QMetaType::QKeySequence QMetaType::Int, QMetaType::QString
QMetaType::QVariantList QMetaType::QStringList (если элементы списка могут быть преобразованы в QString)
QMetaType::LongLong QMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::QString, QMetaType::UInt, QMetaType::ULongLong
QMetaType::QPoint QMetaType::QPointF
QMetaType::QRect QMetaType::QRectF
QMetaType::QString QMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::QColor, QMetaType::QDate, QMetaType::QDateTime, QMetaType::Double, QMetaType::QFont, QMetaType::Int, QMetaType::QKeySequence, QMetaType::LongLong, QMetaType::QStringList, QMetaType::QTime, QMetaType::UInt, QMetaType::ULongLong, QMetaType::QUuid
QMetaType::QStringList QMetaType::QVariantList, QMetaType::QString (если в списке ровно один элемент)
QMetaType::QTime QMetaType::QString
QMetaType::UInt QMetaType::Bool, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::ULongLong
QMetaType::ULongLong QMetaType::Bool, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt
QMetaType::QUuid QMetaType::QByteArray, QMetaType::QString

Поддерживается приведение между примитивными типами (int, float, bool и т. д.).

Преобразование между указателями на типы, производные от QObject, также вернёт true для этой функции, если qobject_cast от типа, описанного fromType, к типу, описанному toType, будет успешным.

Приведение из последовательной контейнерной структуры также вернёт true для этой функции, если toType — QVariantList.

Аналогично, приведение из ассоциативного контейнера также вернёт true для этой функции, если toType — QVariantHash или QVariantMap.

См. также convert(), QSequentialIterable, Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(), QAssociativeIterable и Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE().

[static] bool QMetaType::canView(QMetaType fromType, QMetaType toType)

Возвращает true , если QMetaType::view может создать изменяемый вид типа toType для типа fromType.

Преобразование между указателями на типы, производные от QObject, вернёт true для этой функции, если qobject_cast от типа, описанного fromType, к типу, описанному toType, будет успешным.

Вы можете создать изменяемый вид типа QSequentialIterable для любого контейнера, зарегистрированного с помощью Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE().

Аналогично, вы можете создать изменяемый вид типа QAssociativeIterable для любого контейнера, зарегистрированного с помощью Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE().

См. также convert(), QSequentialIterable, Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(), QAssociativeIterable и Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE().

[since 6.0] QPartialOrdering QMetaType::compare(const void *lhs, const void *rhs) const

Сравнивает объекты по адресам lhs и rhs для определения порядка.

Возвращает QPartialOrdering::Unordered, если сравнение не поддерживается или значения не упорядочены. В противном случае возвращает QPartialOrdering::Less, QPartialOrdering::Equivalent или QPartialOrdering::Greater, если lhs меньше, эквивалентно или больше rhs соответственно.

Оба объекта должны быть типа, описанного этим метатипом. Если lhs или rhs имеют значение nullptr, значения не упорядочены. Сравнение поддерживается только в том случае, если оператор «меньше чем» типа был виден при объявлении метатипа.

Если оператор «равно» типа также был виден, значения будут равны только если оператор «равно» подтвердит это. При отсутствии оператора «равно», когда ни одно значение не меньше другого, значения считаются равными; если оператор «равно» также доступен и два таких значения не равны, они считаются неупорядоченными, точно так же, как значения NaN (не число) плавающего типа лежат вне его упорядочения.

Примечание: Если оператор «меньше чем» не был виден при объявлении метатипа, значения считаются неупорядоченными, даже если оператор «равно», видимый при объявлении, считает их равными: compare() == 0 согласуется с equals() только в том случае, если оператор «меньше чем» был виден.

Функция была добавлена в Qt 6.0.

См. также equals() и isOrdered().

[since 5.0] void *QMetaType::construct(void *where, const void *copy = nullptr) const

Создаёт значение типа, для которого был создан этот экземпляр QMetaType, в существующей памяти по адресу where, то есть копию copy, и возвращает where. Если copy равно нулю, значение создаётся по умолчанию.

Это функция низкого уровня для явного управления памятью, используемой для хранения типа. Рассмотрите возможность вызова create(), если вам не нужен такой уровень управления (то есть, используйте "new" вместо "placement new").

Вы должны убедиться, что where указывает на место, где можно сохранить новое значение, и что where правильно выровнен. Размер типа можно запросить, вызвав sizeOf().

Правило для выравнивания заключается в том, что тип выравнивается до его естественной границы, которая является наименьшей степенью двойки, большей, чем тип, за исключением случаев, когда это выравнивание больше максимального полезного выравнивания для платформы. В практических целях выравнивание, большее чем 2 * sizeof(void*), необходимо только для специальных инструкций аппаратного обеспечения (например, выравнивания загрузки и сохранения SSE на x86).

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

[static, since 5.2] bool QMetaType::convert(QMetaType fromType, const void *from, QMetaType toType, void *to)

Преобразует объект по адресу from из типа fromType в предварительно выделенное пространство по адресу to типа toType. Возвращает true, если преобразование прошло успешно, в противном случае возвращает false.

Оба from и to должны быть валидными указателями.

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

[since 5.0] void *QMetaType::create(const void *copy = nullptr) const

Возвращает копию copy, предполагая, что она является типом, для которого был создан этот экземпляр QMetaType. Если copy равно nullptr, создаёт экземпляр, сконструированный по умолчанию.

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

См. также QMetaType::destroy().

[since 5.2] bool QMetaType::debugStream(QDebug &dbg, const void *rhs)

Выводит объект по адресу rhs в отладочный поток dbg. Возвращает true при успехе, иначе false.

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

[since 5.0] void QMetaType::destroy(void *data) const

Удаляет data, предполагая, что он является типом, для которого был создан этот экземпляр QMetaType.

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

См. также QMetaType::create().

[since 5.0] void QMetaType::destruct(void *data) const

Деструктурирует значение, расположенное по адресу data, предполагая, что оно является типом, для которого был создан этот экземпляр QMetaType.

В отличие от destroy(), эта функция только вызывает деструктор типа, она не вызывает оператор delete.

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

См. также QMetaType::construct().

[since 6.0] bool QMetaType::equals(const void *lhs, const void *rhs) const

Сравнивает объекты по адресам lhs и rhs на равенство.

Оба объекта должны быть того типа, который описан этим метатипом. Можно сравнивать два объекта только если оператор "меньше чем" или "равно" для типа был виден при объявлении метатипа. В противном случае метатип никогда не считает значения равными. Когда оператор равенства был виден при объявлении метатипа, он является авторитетным; в противном случае, если оператор "меньше чем" был виден, когда ни одно значение не меньше другого, два значения считаются равными. Если значения не упорядочены (см. compare() для подробностей), они не равны.

Возвращает true, если два объекта равны, иначе false.

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

См. также isEqualityComparable() и compare().

[since 5.0] QMetaType::TypeFlags QMetaType::flags() const

Возвращает флаги типа, для которого был создан этот экземпляр QMetaType.

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

См. также QMetaType::TypeFlags и QMetaType::flags().

[static] QMetaType QMetaType::fromName(QByteArrayView typeName)

Возвращает QMetaType, соответствующий typeName. Возвращаемый объект недействителен, если typeName не известен QMetaType.

[static, since 5.15] template <typename T> QMetaType QMetaType::fromType()

Возвращает QMetaType, соответствующий типу в параметре шаблона.

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

[static, since 5.2] bool QMetaType::hasRegisteredConverterFunction(QMetaType fromType, QMetaType toType)

Возвращает true, если система метатипов имеет зарегистрированное преобразование из метатипа fromType в toType.

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

[static, since 5.2] template <typename From, typename To> bool QMetaType::hasRegisteredConverterFunction()

Возвращает true, если система метатипов имеет зарегистрированное преобразование из типа From в тип To.

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

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

[since 6.1] bool QMetaType::hasRegisteredDataStreamOperators() const

Возвращает true, если система метатипов зарегистрировала операторы потоковой передачи данных для этого метатипа.

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

[since 6.0] bool QMetaType::hasRegisteredDebugStreamOperator() const

Возвращает true, если система метатипов имеет зарегистрированный оператор потоковой передачи отладочных данных для этого метатипа.

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

[static, since 5.2] bool QMetaType::hasRegisteredMutableViewFunction(QMetaType fromType, QMetaType toType)

Возвращает true, если система метатипов имеет зарегистрированную изменяемую визуализацию метатипа fromType метатипа toType.

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

[static, since 6.0] template <typename From, typename To> bool QMetaType::hasRegisteredMutableViewFunction()

Возвращает true, если система метатипов имеет зарегистрированную изменяемую визуализацию типа From типа To.

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

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

[since 5.13] int QMetaType::id() const

Возвращает идентификатор типа, хранимый этим экземпляром QMetatype.

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

bool QMetaType::isEqualityComparable() const

Возвращает true если оператор "меньше чем" или "равно" для типа, описанного этим метатипом, был виден при объявлении метатипа, иначе false.

См. также equals() и isOrdered().

bool QMetaType::isOrdered() const

Возвращает true если оператор "меньше чем" для типа, описанного этим метатипом, был виден при объявлении метатипа, иначе false.

См. также compare() и isEqualityComparable().

[static] bool QMetaType::isRegistered(int type)

Возвращает true если тип данных с ID type зарегистрирован, иначе возвращает false.

См. также type(), typeName(), и Type.

[since 5.0] bool QMetaType::isRegistered() const

Возвращает true если этот объект QMetaType содержит действительную информацию о типе, в противном случае false.

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

[since 5.0] bool QMetaType::isValid() const

Возвращает true если этот объект QMetaType содержит действительную информацию о типе, в противном случае false.

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

bool QMetaType::load(QDataStream &stream, void *data) const

Считывает объект этого типа из заданного stream в data. Возвращает true если объект загружен успешно, иначе возвращает false.

Тип должен быть зарегистрирован с помощью Q_DECLARE_METATYPE() предварительно.

Обычно вам не нужно вызывать эту функцию напрямую. Вместо этого используйте QVariant's operator>>(), которая использует load() для потоковой передачи пользовательских типов.

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

[since 5.5] const QMetaObject *QMetaType::metaObject() const

Возвращает QMetaObject, связанный с этим типом.

Если тип является указателем на подкласс QObject, flags() содержит QMetaType::PointerToQObject, и эта функция возвращает соответствующий QMetaObject. Это можно использовать в сочетании с QMetaObject::construct для создания QObject этого типа.

Если тип является Q_GADGET, flags() содержит QMetaType::IsGadget, и эта функция возвращает его QMetaObject. Это можно использовать для получения QMetaMethod и QMetaProperty и их использования с указателем на этот тип (например, с помощью QVariant::data).

Если тип является перечислением, flags() содержит QMetaType::IsEnumeration, и эта функция возвращает QMetaObject содержащего объекта, если перечисление было зарегистрировано как Q_ENUM, или nullptr в противном случае.

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

См. также QMetaType::flags().

[since 5.15] const char *QMetaType::name() const

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

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

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

[static, since 5.2] template <typename From, typename To> bool QMetaType::registerConverter()

Регистрирует возможность неявного преобразования типа From в тип To в системе метаданных типов. Возвращает true если регистрация прошла успешно, в противном случае false.

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

[static, since 5.2] template <typename MemberFunction, int> bool QMetaType::registerConverter(MemberFunction function)

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

Регистрирует метод function, такой как To From::function() const, как преобразователь типа From в тип To в системе метаданных типов. Возвращает true если регистрация прошла успешно, в противном случае false.

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

[static, since 5.2] template <typename MemberFunctionOk, char> bool QMetaType::registerConverter(MemberFunctionOk function)

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

Регистрирует метод function, такой как To From::function(bool *ok) const, как преобразователь типа From в тип To в системе метаданных типов. Возвращает true если регистрация прошла успешно, в противном случае false.

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

[static, since 5.2] template <typename UnaryFunction> bool QMetaType::registerConverter(UnaryFunction function)

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

Регистрирует унарную функцию function как преобразователь типа From в тип To в системе метаданных типов. Возвращает true если регистрация прошла успешно, в противном случае false.

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

[static, since 6.0] template <typename MemberFunction, int> bool QMetaType::registerMutableView(MemberFunction function)

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

Регистрирует метод function, подобный To From::function(), как изменяемый вид типа To на тип From в системе метаданных типов. Возвращает true если регистрация прошла успешно, в противном случае false.

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

[static, since 6.0] template <typename MemberFunctionOk, char> bool QMetaType::registerMutableView(MemberFunctionOk function)

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

Регистрирует метод function, подобный To From::function(bool *ok), как изменяемый вид типа To на тип From в системе метаданных типов. Возвращает true если регистрация прошла успешно, в противном случае false.

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

[static, since 6.0] template <typename UnaryFunction> bool QMetaType::registerMutableView(UnaryFunction function)

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

Регистрирует унарный объект функции function как изменяемый вид типа To на тип From в системе метаданных типов. Возвращает true если регистрация прошла успешно, в противном случае false.

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

bool QMetaType::save(QDataStream &stream, const void *data) const

Записывает объект, на который указывает data, в заданный поток stream. Возвращает true если объект сохранён успешно; в противном случае возвращает false.

Тип должен быть зарегистрирован с помощью Q_DECLARE_METATYPE() предварительно.

Обычно вам не нужно вызывать эту функцию напрямую. Вместо этого используйте QVariant's operator<<(), которая использует save() для потоковой передачи пользовательских типов.

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

[since 5.0] qsizetype QMetaType::sizeOf() const

Возвращает размер типа в байтах (т.е. sizeof(T), где T — фактический тип, для которого этот экземпляр QMetaType был создан).

Эта функция обычно используется совместно с construct() для выполнения низкоуровневого управления памятью, используемой типом.

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

См. также QMetaType::construct(), QMetaType::sizeOf(), и QMetaType::alignOf().

[static, since 6.0] bool QMetaType::view(QMetaType fromType, void *from, QMetaType toType, void *to)

Создаёт изменяемый вид объекта в from типа fromType в предварительно выделенном пространстве в to типа toType. Возвращает true если преобразование выполнено успешно, в противном случае false.

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

Связанные нечлены

template <typename T> int qMetaTypeId()

Возвращает идентификатор метатипа типа T во время компиляции. Если тип не был объявлен с помощью Q_DECLARE_METATYPE(), компиляция завершится ошибкой.

Типичное использование:

int id = qMetaTypeId<QString>();    // id is now QMetaType::QString
id = qMetaTypeId<MyStruct>();       // compile error if MyStruct not declared

QMetaType::type() возвращает тот же идентификатор, что и qMetaTypeId(), но выполняет поиск во время выполнения на основе имени типа. QMetaType::type() немного медленнее, но компиляция завершается успешно, если тип не зарегистрирован.

См. также Q_DECLARE_METATYPE() и QMetaType::type().

template <typename T> int qRegisterMetaType(const char *typeName)

Регистрирует имя типа typeName для типа T. Возвращает внутренний ID, используемый QMetaType. Любой класс или структура, имеющие публичный конструктор по умолчанию, публичный копирующий конструктор и публичный деструктор, могут быть зарегистрированы.

Для этой функции необходимо, чтобы T был полностью определённым типом в момент вызова функции. Для типов указателей также требуется, чтобы тип, на который они указывают, был полностью определён. Используйте Q_DECLARE_OPAQUE_POINTER(), чтобы иметь возможность регистрировать указатели на вперёд объявленные типы.

После регистрации типа вы можете динамически создавать и уничтожать объекты этого типа во время выполнения.

В этом примере регистрируется класс MyClass:

qRegisterMetaType<MyClass>("MyClass");

Эта функция полезна для регистрации псевдонимов (typedef), чтобы они могли использоваться QMetaProperty или в QueuedConnections.

typedef QString CustomString;
qRegisterMetaType<CustomString>("CustomString");

Предупреждение: Эта функция полезна только для регистрации псевдонима (typedef). Для всех остальных случаев следует использовать Q_DECLARE_METATYPE и qMetaTypeId().

См. также isRegistered() и Q_DECLARE_METATYPE().

template <typename T> int qRegisterMetaType()

Вызовите эту функцию для регистрации типа T. T должен быть объявлен с помощью Q_DECLARE_METATYPE(). Возвращает идентификатор метатипа.

Пример:

int id = qRegisterMetaType<MyStruct>();

Для этой функции необходимо, чтобы T был полностью определённым типом в момент вызова функции. Для типов указателей также требуется, чтобы тип, на который они указывают, был полностью определён. Используйте Q_DECLARE_OPAQUE_POINTER(), чтобы иметь возможность регистрировать указатели на вперёд объявленные типы.

Чтобы использовать тип T в QVariant, достаточно использовать Q_DECLARE_METATYPE(). Чтобы использовать тип T в очереди сигналов и слотов, qRegisterMetaType<T>() должен быть вызван перед установлением первого подключения.

Также, чтобы использовать тип T с API QObject::property(), qRegisterMetaType<T>() должен быть вызван перед его использованием, обычно в конструкторе класса, использующего T, или в функции main().

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

[since 5.15] bool operator!=(QMetaType a, QMetaType b)

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

Возвращает true, если QMetaType a представляет другой тип, чем QMetaType b, в противном случае возвращает false.

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

[since 5.15] bool operator==(QMetaType a, QMetaType b)

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

Возвращает true, если QMetaType a представляет тот же тип, что и QMetaType b, в противном случае возвращает false.

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

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

Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE(Container)

Этот макрос делает контейнер Container известным QMetaType как ассоциативный контейнер. Это позволяет поместить экземпляр Container<T, U> в QVariant, если T и U сами известны QMetaType.

Обратите внимание, что все ассоциативные контейнеры Qt уже имеют встроенную поддержку, и использование этого макроса с ними не обязательно. Контейнер std::map также имеет встроенную поддержку.

Этот пример демонстрирует типичное использование Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE():

#include <unordered_list>

Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE(std::unordered_map)

void someFunc()
{
    std::unordered_map<int, bool> container;
    QVariant var = QVariant::fromValue(container);
    // ...
}

Q_DECLARE_METATYPE(Type)

Этот макрос делает тип Type известным QMetaType, при условии, что он предоставляет публичный конструктор по умолчанию, публичный копирующий конструктор и публичный деструктор. Это необходимо для использования типа Type в качестве пользовательского типа в QVariant.

Этот макрос требует, чтобы Type был полностью определённым типом в момент его использования. Для типов указателей также требуется, чтобы тип, на который они указывают, был полностью определён. Используйте в сочетании с Q_DECLARE_OPAQUE_POINTER() для регистрации указателей на вперёд объявленные типы.

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

Добавление Q_DECLARE_METATYPE() делает тип известным всем функциям на основе шаблонов, включая QVariant. Обратите внимание, что если вы планируете использовать тип в *очередных* сигналах и слотах или в системе свойств QObject, вам также нужно вызвать qRegisterMetaType(), поскольку имена разрешаются во время выполнения.

Этот пример показывает типичное использование Q_DECLARE_METATYPE():

struct MyStruct
{
    int i;
    ...
};

Q_DECLARE_METATYPE(MyStruct)

Если MyStruct находится в пространстве имён, макрос Q_DECLARE_METATYPE() должен находиться вне пространства имён:

namespace MyNamespace
{
    ...
}

Q_DECLARE_METATYPE(MyNamespace::MyStruct)

Так как MyStruct теперь известен QMetaType, он может быть использован в QVariant:

MyStruct s;
QVariant var;
var.setValue(s); // copy s into the variant

...

// retrieve the value
MyStruct s2 = var.value<MyStruct>();

Некоторые типы регистрируются автоматически и не нуждаются в этом макросе:

  • Указатели на классы, производные от QObject
  • QList<T>, QQueue<T>, QStack<T> или QSet<T>, где T — зарегистрированный метатип
  • QHash<T1, T2>, QMap<T1, T2> или QPair<T1, T2>, где T1 и T2 — зарегистрированные метатипы
  • QPointer<T>, QSharedPointer<T>, QWeakPointer<T>, где T — класс, производный от QObject
  • Перечисления, зарегистрированные с помощью Q_ENUM или Q_FLAG
  • Классы, имеющие макрос Q_GADGET

Примечание: Этот метод также регистрирует операторы потока и отладки для типа, если они видны во время регистрации. Поскольку это делается автоматически в некоторых местах, настоятельно рекомендуется объявлять операторы потока для типа непосредственно после самого типа. Из-за правил зависимого от аргумента поиска C++, также настоятельно рекомендуется объявлять операторы в том же пространстве имён, что и сам тип.

Операторы потока должны иметь следующие сигнатуры:

QDataStream &operator<<(QDataStream &out, const MyClass &myObj);
QDataStream &operator>>(QDataStream &in, MyClass &myObj);

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

[since 5.0] Q_DECLARE_OPAQUE_POINTER(PointerType)

Этот макрос позволяет регистрировать указатели на вперёд объявленные типы (PointerType) с помощью Q_DECLARE_METATYPE() или qRegisterMetaType().

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

См. также Q_DECLARE_METATYPE() и qRegisterMetaType().

Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(Container)

Этот макрос делает контейнер Container известным QMetaType как последовательный контейнер. Это позволяет поместить экземпляр Container<T> в QVariant, если T сам известен QMetaType.

Обратите внимание, что все последовательные контейнеры Qt уже имеют встроенную поддержку, и использование этого макроса с ними не обязательно. Контейнеры std::vector и std::list также имеют встроенную поддержку.

Этот пример демонстрирует типичное использование Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE():

#include <deque>

Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(std::deque)

void someFunc()
{
    std::deque<QFile*> container;
    QVariant var = QVariant::fromValue(container);
    // ...
}

Q_DECLARE_SMART_POINTER_METATYPE(SmartPointer)

Этот макрос делает умный указатель SmartPointer известным QMetaType как умный указатель. Это позволяет поместить экземпляр SmartPointer<T> в QVariant, если T — тип, который наследуется от QObject.

Обратите внимание, что QWeakPointer, QSharedPointer и QPointer уже имеют встроенную поддержку, и использование этого макроса с ними не обязательно.

Этот пример демонстрирует типичное использование Q_DECLARE_SMART_POINTER_METATYPE():

#include <memory>

Q_DECLARE_SMART_POINTER_METATYPE(std::shared_ptr)

void someFunc()
{
    auto smart_ptr = std::make_shared<QFile>();
    QVariant var = QVariant::fromValue(smart_ptr);
    // ...
    if (var.canConvert<QObject*>()) {
        QObject *sp = var.value<QObject*>();
        qDebug() << sp->metaObject()->className(); // Prints 'QFile'.
    }
}

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

Spec-Zone.ru

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