QTableWidget 信号无限循环(cellChanged)
Infinite loop on QTableWidget signal (cellChanged)
我有一个信号从 QTableWidget 发送到函数 recalculate(int, int)
所在的位置。该函数根据用户输入进行一些计算并更改单元格背景颜色。
connect(ui->tableWidget_input, SIGNAL(cellChanged(int, int)), this, SLOT(recalculate(int, int)));
问题是当背景颜色改变时 cellChanged 发出信号,我需要信号发射 只有 当 文本改变时 .
颜色变化导致无限循环是这样的:
- 用户更改单元格值,信号被发射。
Recalculate
(): 当一个条件通过时,改变背景。
- 当背景发生变化时,Qt 认为单元格发生变化并发出信号。
Recalculate
(): 当一个条件通过时,改变背景。
- 一次又一次进入无限。
拜托,您知道如何通过 仅更改文本 - 不更改背景颜色来发射信号吗?
一个简单的解决方案是使用 blockSignals():
来阻止 QTableWidget 信号的发射
void Foo::recalculate(int row, int column){
ui->tableWidget_input->blockSignals(true);
// update here
ui->tableWidget_input->blockSignals(false);
}
我有一个信号从 QTableWidget 发送到函数 recalculate(int, int)
所在的位置。该函数根据用户输入进行一些计算并更改单元格背景颜色。
connect(ui->tableWidget_input, SIGNAL(cellChanged(int, int)), this, SLOT(recalculate(int, int)));
问题是当背景颜色改变时 cellChanged 发出信号,我需要信号发射 只有 当 文本改变时 .
颜色变化导致无限循环是这样的:
- 用户更改单元格值,信号被发射。
Recalculate
(): 当一个条件通过时,改变背景。- 当背景发生变化时,Qt 认为单元格发生变化并发出信号。
Recalculate
(): 当一个条件通过时,改变背景。- 一次又一次进入无限。
拜托,您知道如何通过 仅更改文本 - 不更改背景颜色来发射信号吗?
一个简单的解决方案是使用 blockSignals():
来阻止 QTableWidget 信号的发射void Foo::recalculate(int row, int column){
ui->tableWidget_input->blockSignals(true);
// update here
ui->tableWidget_input->blockSignals(false);
}