参考:
关于QTableWidget的信号cellChanged使用方法(这个信号好坑)
QTableWidget信号itemChanged
由于无论是代码改动还是仅仅点击事件都有可能会触发此信号导致数据错误,对此有两种解决方法,一是屏蔽信号,二是设置一个全局标志位在特定情况下再对信号进行处理。
- 屏蔽信号
当用代码刷新更改内容时屏蔽信号,只有在界面更改才触发。自定义代理里如果触发了信号用blockSignals也适用。
classTable->blockSignals(true); //屏蔽掉信号,这样就不会触发itemChanged信号
dosomething() //对表格item的操作
classTable->blockSignals(false);
// 代理内QAbstractItemModel的setData函数也会触发itemChanage
QAbstractItemModel * model;
model->blockSignals(true);
model->setData(...);
model->blockSignals(false);
// 代理使用详见博主另外博客 搜代理关键字即可
- 设置全局变量
首先创建一个标志flag为false。然后在ItemDoubleClicked信号槽中将此置为true,这样就说明已经对表格进行修改了,接着在itemChanged信号槽中对flag进行判断,false则返回,true则继续执行。