Qt单选按钮仅在实际选中按钮时调用SLOT()

Qt Radio Button only call SLOT() when button is actually checked

本文关键字:按钮 调用 SLOT 单选按钮 Qt      更新时间:2023-10-16

我有一组单选按钮。这些都连接到同一个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(),使其仅在其中一种情况下发生,当单击的项目被选中时?

谢谢

您要求连接到切换信号- 每当切换对象时都会调用您。有什么令人惊讶的?

您可以连接到"单击"信号,该信号提供可以测试的"已检查"参数。

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

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

toggled(bool)

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

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

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