信号中的Qt枚举需要qRegisterMetaType

时间:2016-05-16 13:09:31

标签: c++ qt enums

我在基于QObject的课程中有一个枚举和一个属性,如:

Q_ENUMS(StateEnum)
Q_PROPERTY(StateEnum state READ state NOTIFY stateChanged)

当我尝试emit stateChanged(state)时,收到错误:

QObject::connect: Cannot queue arguments of type 'StateEnum'
(Make sure 'StateEnum' is registered using qRegisterMetaType().)

为什么我需要调用qRegisterMetaType?我认为这就是Q_ENUMS的作用。

1 个答案:

答案 0 :(得分:2)

您正在寻找Q_ENUM() macro。这将取代现已弃用的Q_ENUMS并自动注册元类型。

您的代码应如下所示:

Q_ENUM(StateEnum) //note the missing 'S' here
Q_PROPERTY(StateEnum state READ state NOTIFY stateChanged)