有3种方法可以解决这个问题:
1. 仅在初始化函数中进行连接
因为初始化函数在在整个程序中只运行一次,所以这里面连接信号和槽,就能避免重复连接问题了。
2. 槽函数触发后,在槽函数中断开(该方式可以实现动态的连接了)
QMetaObject::Connection connectHandler = connect(pBtn, &QAbstractButton::clicked, this, &QtWidgetsApplication2::btnClicked);
// 先断开连接
disconnect(connectHandler);
// 重新连接
connect(pBtn, &QAbstractButton::clicked, this, &QtWidgetsApplication2::btnClicked);
3. 连接函数写上参数Qt::UniqueConnection
Qt::UniqueConnection的作用是:如果该信号以前没连接过,则连接它,返回true,如果以前连接过,则不再连接,返回false。例如 connect(ui.btn, &QAbstractButton::clicked, this, &QtWidgetsApplication2::btnClicked, Qt::UniqueConnection);
connect第五个参数
第五个参数共有五种:
1.Qt::AutoConnection&