Qt如何阻塞信号发送?

    Qt的信号槽是一个很好用的东西,不过有时候我们希望某些时刻不要触发某个信号的槽函数。


    举个例子:

    写一个槽函数连接QComboBox的currentIndexChanged信号,用于执行当QComboBox的当前项发生变化时的一些操作。关键代码如下:

    image.png

    image.png

    (例子中当QComboBox当前项发生变化时只是简单的打印一句话 )

    

    接着添加一个按钮,点击按钮时重新设置m_combo的下拉项,代码如下:

   image.png

    

    当调用m_combo的clear和addItem时也会触发currentIndexChanged信号。

    image.png

    实际上我们只希望鼠标点击QComboBox时才触发currentIndexChanged信号,因此我们需要屏蔽掉点击按钮产生的信号,该如何设置呢?

我们只需要调用blockSignals函数,传入true表示阻塞该对象的信号,false取消阻塞。blockSignals是从QObject的函数,因此只要能用信号槽的对象都能使用它。修改后的代码如下:

image.png


修改后再次点击reset按钮不再出发currentIndexChanged信号,鼠标点击下拉框选择选项仍会触发currentIndexChanged信号。

演示站
上一篇:Flask 请求钩子before_request和after_request
下一篇:QML提示Invalid component body specification

发表评论