Qt的信号槽是一个很好用的东西,不过有时候我们希望某些时刻不要触发某个信号的槽函数。
举个例子:
写一个槽函数连接QComboBox的currentIndexChanged信号,用于执行当QComboBox的当前项发生变化时的一些操作。关键代码如下:
(例子中当QComboBox当前项发生变化时只是简单的打印一句话 )
接着添加一个按钮,点击按钮时重新设置m_combo的下拉项,代码如下:
当调用m_combo的clear和addItem时也会触发currentIndexChanged信号。
实际上我们只希望鼠标点击QComboBox时才触发currentIndexChanged信号,因此我们需要屏蔽掉点击按钮产生的信号,该如何设置呢?
我们只需要调用blockSignals函数,传入true表示阻塞该对象的信号,false取消阻塞。blockSignals是从QObject的函数,因此只要能用信号槽的对象都能使用它。修改后的代码如下:
修改后再次点击reset按钮不再出发currentIndexChanged信号,鼠标点击下拉框选择选项仍会触发currentIndexChanged信号。
发表评论