Qt:QMetaType类

QMetaType类管理元对象系统中的命名类型

头文件:

#include 

qmake:

find_package(Qt6 COMPONENTS Core REQUIRED)
target_link_libraries(mytarget PRIVATE Qt6::Core)

cmake:

QT += core

注意:此类中的所有函数都是线程安全的。

详细说明

该类被用作在QVariant、队列信号和槽连接中marshall类型的助手。

QMetaType类管理Qt的元类型系统,它将类型名称与类型关联,从而可以在run-time时动态的创建和销毁类型。

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>>()运算符。

公共类型

Type

enum QMetaType::Type

以下是QMetaType支持的内置类型(QT内置类型都已经注册enum QMetaType::Type,enum QMetaType::Type从0开始,其中 0 为UnknowType, 1024为用户自定义类型起始位置。):

Qt:QMetaType类_第1张图片
可以使用Q_DECLARE_METATYPE()注册其他类型。

另请参见type()和typeName()。

TypeFlag、TypeFlags

enum QMetaType::TypeFlag
flags QMetaType::TypeFlags

TypeFlag描述了QMetaType支持的类型的属性。

Qt:QMetaType类_第2张图片

TypeFlags类型是QFlags 的typedef 。它存储TypeFlag值的OR组合。

公共函数

QMetaType

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

构造一个QMetaType对象,该对象包含有关typeId的所有信息。

此功能是在Qt 5.0中引入的。

alignOf

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

返回以字节为单位的类型的对齐方式(即alignof(T),其中T是为其构造此QMetaType实例的实际类型)。

此函数通常与Construct()一起使用,以对类型使用的内存执行低级管理。

此功能是在Qt 6.0中引入的。

另请参见:QMetaType::construct() 、QMetaType::sizeOf().

canConvert

[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:
Returns true if QMetaType::convert can convert from fromType to toType.

The following conversions are supported by Qt:
如果QMetaType::convert可以从fromType转换为toType,则返回true。

Qt支持以下转换:
Qt:QMetaType类_第3张图片

支持在基元类型(int、float、bool等)之间进行强制转换。

如果从fromType描述的类型到toType描述的类型的QObject转换成功,那么从QObject派生的类型的指针之间的转换也将为此函数返回true。

如果toType为QVariantList,则来自顺序容器的强制转换也将为此函数返回true。

类似地,来自关联容器的强制转换也将为此函数返回true,toType为QVariantHash或QVariantMap。

另请参见:convert(), QSequentialIterable, Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(), QAssociativeIterable, and Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE().

相关非成员

你可能感兴趣的:(C++)