2011-04-09 55 views
2

在QtCreator 變化信號/插槽上下文菜單中,我不能插入既不信號也不具有參數化參數如插槽:的QList <的QString>等,或甚至只引用常規類型( int,QSring等)QtCreator和信號和槽

爲什麼?

回答

5

當連接信號到插座使用的QObject的元類型系統:

連接(發件人,SIGNAL(更新(的QList < MyClass的>),接收器,SLOT(list_updated(的QList < MyClass的>))

信號和槽的參數是「的QList < MyClass的>」的元類型。既然是定製元類型,Qt庫沒有底層實現類型的知識。

用 聲明新類型Q_DECLARE_METATYPE()使它們可用於QVariant和其他 基於模板的函數。請致電 qRegisterMetaType()使類型 可用於基於非模板的 功能,例如排隊信號 和插槽連接。

所以你需要添加元類型聲明,你做連接之前:

qRegisterMetaType<MyClass>("MyClass"); 
qRegisterMetaType<QList<MyClass> >("QList<MyClass>"); 
+1

哎喲,不知道的Qt能拿這麼醜'(' – rubenvb 2011-04-26 14:44:40

+0

恕我直言,這不是醜,而是精彩 !因爲通過這種方式,你可以在QVariant中導出一個自定義類,並且你可以做任何你想做的事情! 比如序列化或者像CORBA那樣的信號和插槽...... 想想這種可能性! – poe84it 2015-04-10 11:26:11