简介
在Qt中,qRegisterMetaType
是一个用于向元对象系统注册自定义类型的函数。这对于需要在信号和槽中使用自定义类型(包括模板类如 std::shared_ptr
)或用于排队连接(Queued Connection)非常重要。
作用:
-
使类型可用于信号与槽机制:特别是当信号和槽连接类型为
Qt::QueuedConnection
(跨线程)或Qt::BlockingQueuedConnection
时。 -
允许类型在QVariant中使用:注册后的类型可以通过
QVariant
进行存储和传递。 -
提供类型名到类型的映射:允许在运行时动态创建、拷贝和销毁对象实例。
为什么需要registerType
?
如果不注册,Qt无法处理非内置类型、非Qt类型的参数,会导致运行时错误(如:QMetaType::registerType: type name is unknown
)。
在Qt的信号槽跨线程调用中,参数需要被拷贝存储到事件队列中。Qt必须知道如何:
拷贝参数(使用拷贝构造函数)
在事件处