为什么连接的信号有参数但插槽没有?

时间:2013-09-23 12:52:14

标签: c++ qt signals signals-slots slots

Qt 4.8.1,原始代码如下:

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

这真让我迷惑,[问题]我可以在使用QObject :: connect时将参数传递给slot函数吗? 这告诉我参数应该匹配,但是这里发生的事情,如果我删除那个参数,代码就会出错。

2 个答案:

答案 0 :(得分:4)

Qt documentation描述了这一点。搜索"(事实上,一个插槽的签名可能比它收到的信号更短,因为它可以忽略额外的参数。)"在标题"信号和插槽"

基本上,如果N且第一个M参数匹配类型,您可以将M <= N - 参数信号连接到M - 参数广告位。信号中的任何剩余参数都会被插槽忽略。

答案 1 :(得分:1)

QT Doc说,

信号和插槽机制是类型安全的:信号的签名必须与接收插槽的签名匹配。 (事实上​​,一个插槽的签名可能比它收到的信号更短,因为它可以忽略额外的参数。)