1、坑的现象
有时项目中一个信号发出,对应连接的槽函数会执行多次,普通刷新界面都不会有问题,但是特别频繁的就会影响性能,如果是改变数据的,更有甚者会异常崩溃
2、遇坑的原因
qt中同一实例的同一信号和槽,connect多次,当信号发出时,槽函数会被调用多次
3、例子
#include "ui_widget.h"
#include "QDebug"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
connect(this, &Widget::sigTest, this, &Widget::sltTest);
connect(this, &Widget::sigTest, this, &Widget::sltTest);
}
Widget::~Widget()
{
delete ui;
}
void Widget::sltTest()
{
qDebug() << "test";
}
void Widget::on_pushButton_clicked()
{
emit sigTest();//鼠标点击按钮后发出信号
}
//输出结果:
test
test
4、避坑
- disconnect
每次槽函数使用完后,调用disconnect将信号与槽的绑定解除
- connect连接方式选择
connect的第五个参数选择Qt::UniqueConnection , 防止重复连接, 如果当前信号和槽已经连接过了,就不再连接了
connect(this, &Widget::sigTest, this, &Widget::sltTest, Qt::UniqueConnection);