在调用 qRegisterMetaType 之前是否必须调用 Q_DECLARE_METATYPE?

Nya*_*uko 0 c++ qt

在排队信号中使用自定义类型的情况下。注册我的自定义类型的正确顺序是什么?

是否有必要调用Q_DECLARE_METATYPE之前qRegisterMetaType

为什么我必须为排队信号而不是直接信号注册自定义类型?

Jea*_*ier 5

是否需要在 qRegisterMetaType 之前调用 Q_DECLARE_METATYPE?

这是。qRegisterMetaType上的 Qt 文档明确指出:

T 必须用 Q_DECLARE_METATYPE() 声明。

您必须为排队信号注册自定义类型,因为通过注册它,Qt 可以在其事件循环中制作它的副本(当然使用 QVariant)并稍后将其作为参数传递(当原始传递的值很长时间超出范围时)。