Qt cellClicked信号多次触发
前言
最近在开发过程中,因为某些操作多次触发QTableWidget的cellClicked事件。具体场景回忆不起了,只记得是信号是多次触发了, 于是通过先断开信号,在连接信号的方式解决了。
解决方法代码示例
ui->tableWidget->disconnect(SIGNAL(cellClicked(int, int))); // 先断开连接 ui->tableWidget->setRowCount(10); ui->tableWidget->setColumnCount(4); for(int i = 0; i < 10; ++i) { for(int j = 0; j < 4; ++j) { ui->tableWidget->setItem(i, j, new QTableWidgetItem(QString("%1-%2").arg(i).arg(j))); } } connect(ui->tableWidget, &QTableWidget::cellClicked, this, &FrmLess::cellDoubleClicked); // 再连接信号
断开信号连接方式
1. 断开对象连接的所有信号
ui->tableWidget->disconnect(); // 方法1 disconnect(ui->tableWidget, nullptr, nullptr, nullptr); // 方法2
2. 断开对象的指定信号
ui->tableWidget->disconnect(SIGNAL(cellClicked(int, int))); // 方法1 disconnect(ui->tableWidget, SIGNAL(cellClicked(int, int)), nullptr, nullptr); // 方法1
3. 断开指定接收对象
ui->tableWidget->disconnect(this); disconnect(ui->tableWidget, SIGNAL(cellClicked(int, int)), this, nullptr);