信号槽就好比单片机里面的中断,某个中断发生后,触发中断函数。
刚好,信号槽的连接和断开就好比单片机的中断使能和失能一样。接下来用给实际例子说明该种用法。
我们想通过文本框的内容变化事件触发一个函数,用来处理文本框内的字符串。然而,当我们处理字符串由回写后,肯定会导致文本框内的内容变化,再次触发事件。这是我们不像看到的,能否像中断函数一样,进入后,我们先关闭中断,完成后,清理中断标志,恢复中断功能呢?
信号槽的连接通过:
connect(Sender,SIGNAL(signal),Receiver,SLOT(slot));
实际上connect函数应该是如下形式:
connect(sender,SIGNAL(signal),receiver,SLOT(slot),Qt::DirectConnection);
信号槽的断开通过:
[static] bool QObject::disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)
disconnect(myObject, 0, 0, 0);
myObject->disconnect();
disconnect(myObject, SIGNAL(mySignal()), 0, 0);
myObject->disconnect(SIGNAL(mySignal()));
disconnect(myObject, 0, myReceiver, 0);
myObject->disconnect(myReceiver);
----------------------------------------------------------------------------
以上是几种常用形式,现在看我们这里怎么用。
我们通过UI建立信号槽后,系统默认会给我们配置和信号槽连接,在程序里不可见。
我们在信号事件触发的函数里通过下面的指令,断开信号连接。
ui->textEdit->disconnect();执行其他的任务后,恢复连接
connect(ui->textEdit,SIGNAL(textChanged()),this,SLOT(on_textEdit_textChanged()));
|