Бесконечный l oop для сигнала QTableWidget (cellChanged) - PullRequest
1 голос
/ 15 марта 2020

У меня есть сигнал, поступающий из QTableWidget в слот, где находится функция recalculate(int, int). Основываясь на пользовательском вводе, функция выполняет некоторые вычисления и изменяет цвет фона ячейки.

connect(ui->tableWidget_input, SIGNAL(cellChanged(int, int)), this, SLOT(recalculate(int, int)));

Проблема в том, что cellChanged выдает сигнал при изменении цвета фона, мне нужно только излучение сигнала при изменении текста .

Изменение цвета вызывает бесконечное l oop следующим образом:

  1. Пользователи изменяют значение ячейки, сигнал испускается.
  2. Recalculate (): Когда условие пройдено, фон изменяется.
  3. Когда фон изменяется, Qt думает, что ячейка была изменена, и сигнал испускается.
  4. Recalculate (): при выполнении условия фон меняется.
  5. Снова и снова в бесконечность.

Пожалуйста, есть ли у вас какие-либо идея, как сделать излучение сигнала только при изменении текста - без изменения цвета фона?

1 Ответ

3 голосов
/ 15 марта 2020

Простое решение - заблокировать излучение сигналов QTableWidget, используя blockSignals () :

void Foo::recalculate(int row, int column){
    ui->tableWidget_input->blockSignals(true);
    // update here
    ui->tableWidget_input->blockSignals(false);   
}
...