当使用了blockSignals(true)之后,该类发出的信号将会被阻塞,并不会缓存,也就是他不会等到不阻塞的时候执行槽函数,而是直接丢掉了。
看例子
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QDebug>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
bool blockflag;
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
signals:
void blockSignal();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
blockflag=false;
ui->setupUi(this);
connect(this,&Widget::blockSignal,[](){
qDebug()<<"槽函数";
});
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
qDebug()<<"按下";
emit blockSignal();
}
void Widget::on_pushButton_2_clicked()
{
if(blockflag)
{
blockSignals(false);
}else{
blockSignals(true);
}
blockflag=!blockflag;
}
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
w.objectName();
return a.exec();
}
ui:
运行之后,直接点击pushbutton是会输出“按下”和“槽函数”的
但是点击pushbutton_2之后,在点击pushbutton是只会输出“按下”的,多次按下pushbutton都一样只输出“按下”,之后再按下pushbutton_2,这时积攒的“槽函数”并没有输出出来,所以说明信号是直接丢弃不被缓存的,此时再次按下pushbutton之后是有“按下”和“槽函数输出的”