我有一个被禁用的组合,但是向其添加元素将发出currentIndexChanged(int)
信号。
我希望禁用小部件时会自然关闭信号,但事实并非如此。我知道有blockSignals(bool)
,但是如果有许多小部件的信号必须“禁用时被阻止”,则blockSignals
将要求每个小部件都具有 bool(boolean) 状态。
禁用小部件时如何禁用它发送的信号(并且不更改其blockSignals
状态)?
编辑
需要说明的是:由于这是一个小部件,因此禁用后用户无法与其进行交互,但是以编程方式更改该小部件时会发出一些信号。就我而言,有两个有趣的信号:currentIndexChanged(int)
和activated(int)
我的代码中的问题是,我有时会以编程方式更改组合,并且希望它发出信号,有时是用户通过交互来更改组合。这就是为什么我使用currentIndexChanged
而不是activated
的原因。
无论如何,在两种情况下,我都不希望禁用小部件时发出信号。
最佳答案
如果您只有QComboBox
,而您的问题似乎没有暗示,那么QComboBox
信号是基于最终用户 Angular 用户交互。
我根本无法重现该问题。我刚刚编写了一个简短的程序,由于无法简单地与小部件进行交互,因此无法获取任何QComboBox信号。
编辑:为临时读者提供更多上下文来更新您的问题可能是一个好主意,但是基于注释的进一步澄清,是的,以编程方式可能是这种情况,但是信号也可能对以编程方式进行处理很有用,并带有相应的插槽,因此Qt自动阻止它们并不是主要的改进。
幸运的是,您希望拥有的功能已经可用:
如果要对许多小部件执行此操作,请创建一个简单的函数而不是myWidget->setDisabled(true);
:
inline bool disableAndBlockSignals(QWidget *widget)
{
widget->setDisabled(true);
return widget->blockSignals(true);
}
如果只想禁用其中的一部分,例如currentIndexChanged
,则可以手动使用disconnect。