2013-09-23 88 views
0

的Qt 4.8.1,原代碼就像這樣:爲什麼連接的信號有參數但插槽沒有?

connect(this->m_CodeMemoryComboBox, SIGNAL(currentIndexChanged(QString)), 
     this, SLOT(updateCodeMemoryFormate())); 

這確實讓我困惑,[提問]使用QObject的時候我可以傳遞參數給插槽功能::連接? 這告訴我參數應該是匹配的,但是在這裏發生了什麼,如果我刪除該參數,代碼將會出錯。

回答

4

Qt documentation描述了這一點。在標題「信號和插槽」下搜索「(實際上一個插槽可能具有比它接收到的信號更短的標記,因爲它可以忽略額外的參數)」

基本上,您可以連接一個N-參數信號M-參數槽如果M <= N和第一個M參數匹配類型。來自信號的任何剩餘參數被插槽忽略。

+0

謝謝,但哪些參數被忽略?誰決定? –

+5

@benhuan,如果你有'signal(a,b,c,d)'和'slot(a,b)'參數'c'和'd'將被忽略。 – vahancho

1

QT Doc說,

的信號和槽機制是類型安全:信號的簽名必須容納槽的簽名相匹配。 (實際上,一個插槽的簽名可能比它收到的信號短,因爲它可以忽略額外的參數。)