c++ - QTableWidget信号(cellChanged)上的无限循环

标签 c++ qt qtablewidget

我有一个信号从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);   
    }
    

    关于c++ - QTableWidget信号(cellChanged)上的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60688038/

    相关文章:

    c++ - C中关于除以零的一些事情

    c++ - Lubuntu 中的 QT 控制台应用程序

    c++ - Qt setCurrentIndex 不会为无效的 ModelIndex 发出 currentChanged

    python - QTableWidget 中的 PyQt5 QComboBox

    c++ - 我无法从串口发送连续数据

    c++ - Qt中连接不同类的信号槽

    c++ - 如何使用 QString 数组调用 QMetaMethod?

    python - 获取 TableView 标题的值

    qt - 在设计时为 QTableWidget 设置列宽

    c++ - 如何将多面体网格拆分为一组具有签名面的不同多面体?