QMetaType Class

  • Header: QMetaType

  • CMake:

    find_package(Qt6 REQUIRED COMPONENTS Core)

    target_link_libraries(mytarget PRIVATE Qt6::Core)

  • qmake: QT += core

  • Group: QMetaType is part of objectmodel

Detailed Description

The class is used as a helper to marshall types in QVariant and in queued signals and slots connections. It associates a type name to a type so that it can be created and destructed dynamically at run-time.

Type names can be registered with QMetaType by using either qRegisterMetaType() or registerType(). Registration is not required for most operations; it's only required for operations that attempt to resolve a type name in string form back to a QMetaType object or the type's ID. Those include some old-style signal-slot connections using QObject::connect(), reading user-types from QDataStream to QVariant, or binding to other languages and IPC mechanisms, like QML, D-Bus, JavaScript, etc.

The following code allocates and destructs an instance of MyClass by its name, which requires that MyClass have been previously registered:

 
Sélectionnez
QMetaType type = QMetaType::fromName("MyClass");
if (type.isValid()) {
    void *myClassPtr = type.create();
    ...
    type.destroy(myClassPtr);
    myClassPtr = nullptr;
}

If we want the stream operators operator<<() and operator>>() to work on QVariant objects that store custom types, the custom type must provide operator<<() and operator>>() operators.

See Also

Member Type Documentation

 

enum QMetaType::Type

These are the built-in types supported by QMetaType:

Constant

Value

Description

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 (introduced in 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 (introduced in Qt 5.5)

QMetaType::QUuid

30

QUuid

QMetaType::QByteArrayList

49

QByteArrayList

QMetaType::User

65536

Base value for user types

QMetaType::UnknownType

0

This is an invalid type id. It is returned from QMetaType for types that are not registered

Additional types can be registered using qRegisterMetaType() or by calling registerType().

See Also

See also type(), typeName()

enum QMetaType::TypeFlag

flags QMetaType::TypeFlags

The enum describes attributes of a type supported by QMetaType.

Constant

Value

Description

QMetaType::NeedsConstruction

0x1

This type has non-trivial constructors. If the flag is not set instances can be safely initialized with memset to 0.

QMetaType::NeedsDestruction

0x2

This type has a non-trivial destructor. If the flag is not set calls to the destructor are not necessary before discarding objects.

QMetaType::RelocatableType

0x4

An instance of a type having this attribute can be safely moved to a different memory location using memcpy.

QMetaType::IsEnumeration

0x10

This type is an enumeration.

QMetaType::IsUnsignedEnumeration

0x100

If the type is an Enumeration, its underlying type is unsigned.

QMetaType::PointerToQObject

0x8

This type is a pointer to a derived of QObject.

QMetaType::IsPointer

0x800

This type is a pointer to another type.

QMetaType::IsConst

0x2000

Indicates that values of this types are immutable; for instance because they are pointers to const objects.

The TypeFlags type is a typedef for QFlags<TypeFlag>. It stores an OR combination of TypeFlag values.

Member Function Documentation

 

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

Constructs a QMetaType object that contains all information about type typeId.

This function was introduced in Qt 5.0.

[constexpr, since 6.0] QMetaType::QMetaType()

Constructs a default, invalid, QMetaType object.

This function was introduced in Qt 6.0.

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

Returns the alignment of the type in bytes (i.e. alignof(T), where T is the actual type for which this QMetaType instance was constructed for).

This function is typically used together with construct() to perform low-level management of the memory used by a type.

This function was introduced in Qt 6.0.

See Also

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

Returns true if QMetaType::convert can convert from fromType to toType.

The following conversions are supported by Qt:

Type

Automatically Cast To

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 (if the list's items can be converted to QStrings)

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 (if the list contains exactly one item)

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

Casting between primitive type (int, float, bool etc.) is supported.

Converting between pointers of types derived from QObject will also return true for this function if a qobject_cast from the type described by fromType to the type described by toType would succeed.

A cast from a sequential container will also return true for this function if the toType is QVariantList.

Similarly, a cast from an associative container will also return true for this function the toType is QVariantHash or QVariantMap.

See Also

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

Returns true if QMetaType::view can create a mutable view of type toType on type fromType.

Converting between pointers of types derived from QObject will return true for this function if a qobject_cast from the type described by fromType to the type described by toType would succeed.

You can create a mutable view of type QSequentialIterable on any container registered with Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE().

Similarly you can create a mutable view of type QAssociativeIterable on any container registered with Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE().

See Also

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

Compares the objects at lhs and rhs for ordering.

Returns QPartialOrdering::Unordered if comparison is not supported or the values are unordered. Otherwise, returns QPartialOrdering::Less, QPartialOrdering::Equivalent or QPartialOrdering::Greater if lhs is less than, equivalent to or greater than rhs, respectively.

Both objects must be of the type described by this metatype. If either lhs or rhs is nullptr, the values are unordered. Comparison is only supported if the type's less than operator was visible to the metatype declaration.

If the type's equality operator was also visible, values will only compare equal if the equality operator says they are. In the absence of an equality operator, when neither value is less than the other, values are considered equal; if equality is also available and two such values are not equal, they are considered unordered, just as NaN (not a number) values of a floating point type lie outside its ordering.

If no less than operator was visible to the metatype declaration, values are unordered even if an equality operator visible to the declaration considers them equal: compare() == 0 only agrees with equals() if the less than operator was visible.

This function was introduced in Qt 6.0.

See Also

See also equals(), isOrdered()

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

Constructs a value of the type that this QMetaType instance was constructed for in the existing memory addressed by where, that is a copy of copy, and returns where. If copy is zero, the value is default constructed.

This is a low-level function for explicitly managing the memory used to store the type. Consider calling create() if you don't need this level of control (that is, use "new" rather than "placement new").

You must ensure that