Приложение cra sh при использовании сигнала dataChanged для QTableWidget - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть таблица QTableWidget, заполненная случайными целыми числами. В таблице 4 столбца. Последний столбец редактируемый.

Проблема в том, что если новое значение, введенное пользователем в столбце 4, больше, чем значение в столбце 2, тогда вся строка будет заполнена определенным цветом. И наоборот - если строка уже красная, а новое значение 4 столбцов меньше значения 2 столбцов, строка должна быть перекрашена в белый цвет. Вот код слота для сигнала dataChanged:

connect(ui->tableWidget->model(), &QAbstractItemModel::dataChanged, this, [=](QModelIndex ind) { 
        int row = ind.row();
        QModelIndex comparedInd = ui->tableWidget->model()->index(row, 2);

        if (ind.data().toInt() < comparedInd.data().toInt()) {
            for (int i = 0; i < 4; ++i) {
                ui->tableWidget->item(row, i)->setBackground(QColor(244, 138, 149));
            }
        } else {
            for (int i = 0; i < 4; ++i) {
                ui->tableWidget->item(row, i)->setBackground(QColor(255, 255, 255));
            }
        }
    });

Казалось бы, сигнал должен сработать один раз, когда пользователь закончит редактирование ячейки. Однако слот выполняется огромное количество раз, и в итоге приложение вылетает.

Подскажите, в чем здесь проблема?

...