2016-05-16 45 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)