说好的计划,就要实现,今年我要把吹过的牛皮,设定的计划,统统给圆了。
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);
}
效果图如下。
这里大家可以试试,发送信号的方式,看看是不是会出现是死循环,我真心告诉大家,不要只是去看,多下手写代码,你会学习到更多的东西,让我们共同进步吧。