Qt每天一个小技巧之QObject ::blockSignals(信号阻塞)

   说好的计划,就要实现,今年我要把吹过的牛皮,设定的计划,统统给圆了。

   qt文档读写第一步,如下图,给了我们blockSignal  这个函数。字体意思就是信号阻塞。

我们继续点看具体内容。

 Qt描述:阻塞模式下,这个对象发送的信号都会被阻塞,解除阻塞后则不再阻塞。返回值为之前状态的阻塞情况。

看到这里,很多小伙伴可能跟我一样,这个函数有啥用呢,或者运用在什么方面呢,一般阻塞是为了防止出现死循环,或者等待别的完成后在执行。

我突然想到以前的一个问题:

     如下图,当我改变左边框的文字,右边的也会对应填写数据,当我在右边填写文字的时候,左边也跟着变化。

 它的逻辑图如下:

    这个时候我们可能就发现问题了,如果是信号的话,就会走1-2-3-4-5-2-3... 这样无限循环下去,我们想一下,要是能切断信号4,就可以左边写什么右边写什么,同理切断2的信号,就可以完成右边写什么,左边就写什么了。

    当然你直接使用textChanged  也会判断,至少会多发一个消息。如果只是接受到信号就发送的话,也就会出现死循环的问题,所以我们要用下面的方式来写:

void MainWindow::on_lineEditleft_textChanged(const QString &arg1)
{
   ui->lineEditright->blockSignals(true);
   ui->lineEditright->setText(arg1);
   ui->lineEditright->blockSignals(false);
}

void MainWindow::on_lineEditright_textChanged(const QString &arg1)
{
   ui->lineEditleft->blockSignals(true);
   ui->lineEditleft->setText(arg1);
   ui->lineEditleft->blockSignals(false);
}

效果图如下。 

这里大家可以试试,发送信号的方式,看看是不是会出现是死循环,我真心告诉大家,不要只是去看,多下手写代码,你会学习到更多的东西,让我们共同进步吧。

 

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值