【问题标题】:Qt Radio Button only call SLOT() when button is actually checkedQt Radio Button 仅在实际检查按钮时调用 SLOT()
【发布时间】:2017-05-31 21:45:36
【问题描述】:

我有一组单选按钮。这些都连接到同一个SLOT(updateImage())

它们的设置方式如下:

connect(m_radio1, SIGNAL(toggled(bool)), this, SLOT(updateImage());
connect(m_radio2, SIGNAL(toggled(bool)), this, SLOT(updateImage());
connect(m_radio3, SIGNAL(toggled(bool)), this, SLOT(updateImage());

将单选按钮从一个更改为下一个时,此SLOT() 会被调用两次,一次用于取消选择先前选择的单选按钮,一次用于选择单击的单选按钮。

我想知道,有没有办法将我的SLOT() 修改为仅在其中一种情况下发生,当单击的项目变为选中时?

谢谢

【问题讨论】:

  • 不明白为什么这个问题被否定了?这是一个有效且有用的。

标签: c++ qt signals-slots slot


【解决方案1】:

您要求连接到 toggled 信号 - 只要对象被切换,就会调用您。有什么令人惊讶的?

你可以连接到“clicked”信号,它提供了一个“checked”参数,你可以测试。

顺便说一句;如果使用现代 Qt 版本,您应该放弃 SIGNAL 和 SLOTS 宏,而使用在编译时检查的新 connect() 语法。

【讨论】:

    【解决方案2】:

    因为你的信号有一个布尔参数。

    toggled(bool)
    

    您可以将该参数添加到您的 SLOT 方法中。然后检查该参数是否已检查。

    【讨论】:

      【解决方案3】:

      (作为补充:如何在 Python 中这样做?)假设您有一个单选按钮 radio_button,并且您希望将其连接到插槽 _my_slot,同时将 args 作为参数传递,这样 @987654324 @只在被选中后发送一个信号,那么你需要添加以下内容:

      radio_button.clicked.connect(lambda: _my_slot(args))
      

      【讨论】:

        猜你喜欢
        • 2021-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-14
        • 1970-01-01
        • 1970-01-01
        • 2018-10-11
        相关资源
        最近更新 更多