【问题标题】:why a connection's signal have argument but slot doesn't have one?为什么连接的信号有参数但插槽没有参数?
【发布时间】:2013-09-28 09:05:02
【问题描述】:

Qt 4.8.1,原代码是这样的:

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

这真的让我很困惑,[问题]我可以在使用 QObject::connect 时将参数传递给槽函数吗? 这告诉我参数应该匹配,但是这里发生了什么,如果我删除该参数,代码会出错。

【问题讨论】:

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


    【解决方案1】:

    Qt documentation 对此进行了描述。在标题“信号和槽”下搜索“(事实上,槽的签名可能比它接收的信号更短,因为它可以忽略额外的参数。)”

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

    【讨论】:

    • @benhuan,如果你有signal(a, b, c, d)slot(a, b) 参数cd 将被忽略。
    【解决方案2】:

    QT Doc 说,

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多