2011-10-08 47 views
12

我想用qt信號發射標準字符串。信號將作爲排隊傳遞。我使用qRegisterMetaType註冊類型,就像在qt文檔中說的那樣,但沒有運氣。我註冊像這樣 qRegisterMetaType<std::string>("std::string")用qt信號發射std :: string

回答

17

你也應該這樣做:

Q_DECLARE_METATYPE (std::string) 

報價Qt Doc

添加Q_DECLARE_METATYPE()揭曉所有模板 基於功能的類型,包括QVariant。需要注意的是如果你打算使用 在排隊信號和槽的連接或QObject中的 產權制度的類型,你也必須調用qRegisterMetaType()因爲 名稱是在運行時解決。

+0

我試過了,還是不行。此外,我的項目中有很多信號發出非qt類型,並且從未對它們執行過Q_DECLARE_METATYPE,只有qRegisterMetaType,並且它們正在工作。 – user152508

+1

我只是做了一個快速測試,同時使用qRegisterMetaType和Q_DECLARE_METATYPE確實有效。如果將其中任何一個放棄,都會導致運行時錯誤消息需要調用qRegisterMetaType。我的猜測是,對於您使用的其他類型,您沒有使用Queued連接。 – Chris

+0

好吧,我正在使用這個重載void qRegisterMetaTypeStreamOperators(const char * typeName)也許這就是爲什麼它沒有工作。當嘗試這個overlaod int qRegisterMetaType()與Q_DECLARE_METATYPE的組合它的作品,所以非常感謝。 – user152508