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>>()运算符。
enum QMetaType::Type
以下是QMetaType支持的内置类型(QT内置类型都已经注册enum QMetaType::Type,enum QMetaType::Type从0开始,其中 0 为UnknowType, 1024为用户自定义类型起始位置。):
可以使用Q_DECLARE_METATYPE()
注册其他类型。
另请参见type()和typeName()。
enum QMetaType::TypeFlag
flags QMetaType::TypeFlags
TypeFlag描述了QMetaType支持的类型的属性。
TypeFlags类型是QFlags
的typedef 。它存储TypeFlag值的OR组合。
[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)
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。
支持在基元类型(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().