2016-05-16 46 views
1

我有一个枚举,在我QObject基于类像一个属性:Qt的枚举需要qRegisterMetaType

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

+0

您使用的一些::连接S,或者这是从Q_PROPERTY本身自动?如果你正在做一些额外的连接使用排队连接比你必须使用qRegisterMetaType ..但这只是在黑暗中拍摄..你检查[this](http://stackoverflow.com/questions/12368712/how-使用的-枚举合QT-信号 - 和 - 插槽)? – nayana

回答

2

您在寻找Q_ENUM() macro。这取代了现在不推荐使用的Q_ENUMS,并会自动注册元类型。

您的代码应该是这样的:

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