QTableWidget的itemChanged或cellChanged信号误触发解决方案

当QTableWidget的itemChanged或cellChanged信号触发槽函数并导致循环调用时,可以使用两种方法避免。一种是通过blockSignals在进入槽函数时阻塞信号,退出时恢复;另一种是在进入时断开信号槽连接,退出时重新连接。这两种方法能确保槽函数不会因自身操作而无限循环执行。
摘要由CSDN通过智能技术生成

QTableWidget的itemChanged或cellChanged信号触发,在进入槽函数之后,如果槽函数中对QTableWidget的单元格执行了某些操作(如修改单元格内数据,修改单元格字体颜色等)都会再次触发itemChanged或cellChanged信号然后去执行槽函数,会陷入无限循环。

解决方案:
1. 阻塞方法blockSignals
在进入槽函数时,进入阻塞模式,这个对象发送的信号都会被阻塞;
在退出槽函数前,解除阻塞,重新接受对象发送的信号;
返回值为之前状态的阻塞情况。

# 进入槽函数
self.tableWidget.blockSignals(True)  # 进入阻塞模式
'''执行相关槽函数程序'''
self.tableWidget.blockSignals(False)  # 退出阻塞模式
# 退出槽函数

2. 断开信号槽方法disconnect
在进入槽函数时,断开信号槽;
在退出槽函数前,重新连接信号槽。
同阻塞方法类似。

# 进入槽函数:self.xxxxx
 self.tableWidget.itemChanged.disconnect(self.xxxxx) # 断开信号槽
'''执行相关槽函数程序'''
 self.tableWidget.itemChanged.connect(self.xxxxx)  # 连接信号槽
# 退出槽函数:self.xxxxx
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值