的Qt 4.8.1,原代碼就像這樣:爲什麼連接的信號有參數但插槽沒有?
connect(this->m_CodeMemoryComboBox, SIGNAL(currentIndexChanged(QString)),
this, SLOT(updateCodeMemoryFormate()));
這確實讓我困惑,[提問]使用QObject的時候我可以傳遞參數給插槽功能::連接? 這告訴我參數應該是匹配的,但是在這裏發生了什麼,如果我刪除該參數,代碼將會出錯。
的Qt 4.8.1,原代碼就像這樣:爲什麼連接的信號有參數但插槽沒有?
connect(this->m_CodeMemoryComboBox, SIGNAL(currentIndexChanged(QString)),
this, SLOT(updateCodeMemoryFormate()));
這確實讓我困惑,[提問]使用QObject的時候我可以傳遞參數給插槽功能::連接? 這告訴我參數應該是匹配的,但是在這裏發生了什麼,如果我刪除該參數,代碼將會出錯。
Qt documentation描述了這一點。在標題「信號和插槽」下搜索「(實際上一個插槽可能具有比它接收到的信號更短的標記,因爲它可以忽略額外的參數)」
基本上,您可以連接一個N
-參數信號M
-參數槽如果M <= N
和第一個M
參數匹配類型。來自信號的任何剩餘參數被插槽忽略。
的QT Doc說,
的信號和槽機制是類型安全:信號的簽名必須容納槽的簽名相匹配。 (實際上,一個插槽的簽名可能比它收到的信號短,因爲它可以忽略額外的參數。)
謝謝,但哪些參數被忽略?誰決定? –
@benhuan,如果你有'signal(a,b,c,d)'和'slot(a,b)'參數'c'和'd'將被忽略。 – vahancho