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 发出信号,我需要信号发射 只有 文本改变时 .

颜色变化导致无限循环是这样的:

  1. 用户更改单元格值,信号被发射。
  2. Recalculate(): 当一个条件通过时,改变背景。
  3. 当背景发生变化时,Qt 认为单元格发生变化并发出信号。
  4. Recalculate(): 当一个条件通过时,改变背景。
  5. 一次又一次进入无限。

拜托,您知道如何通过 仅更改文本 - 不更改背景颜色来发射信号吗?

一个简单的解决方案是使用 blockSignals():

来阻止 QTableWidget 信号的发射
void Foo::recalculate(int row, int column){
    ui->tableWidget_input->blockSignals(true);
    // update here
    ui->tableWidget_input->blockSignals(false);   
}