QTableWidget使用数据改变信号量cellChange发生死循环

QTableWidget使用数据改变信号量cellChange发生死循环

首先说明,这个信号非常的,不得不承认我被这个信号恶心到了,只要连接这个信号,不管是你手动更改一个数据,或者是数据的初始化,总之只要表格有一点改变,这个信号就被发射,后果就是:想想没有结束条件的递归吧!

解决方法

其实和处理进程间的通信这类问题是一样的处理办法,我们需要给他加锁或者或设置原子操作

阻塞方法blockSignals

在使用程序进行表格的显示的时候,进入阻塞模式;完成后退出阻塞模式;在手动更改数据后,在我的程序中需要重新显示表格,所以再次自动阻塞,后退出阻塞,如此循环

但是从方法或许有问题:既然是阻塞信号,会不会和进程通信是一样的,信号等待临界区开放,或者即使不等待仍然会发送信号,花费时间,由于笔者没有使用此方法,烦请读者自行探索。

def 表格显示数据():
    self.tableWidget.blockSignals(True)  # 进入阻塞模式
    '''执行程序'''
    self.tableWidget.blockSignals(False)  # 退出阻塞模式
    # 退出槽函数
def 手动更改数据的函数():
    # 进入槽函数
	表格显示数据()
断开信号槽 disconnect

原理通上,只是在阻塞的地方我们使用的是disconnect断开信号槽,这样不会出现我担心的上述问题。

不过需要注意的是,我们必须在初始化的时候先connect信号槽,才有disconnect的操作。

self.tableWidget.self.ShowPosition.cellChanged.connect(self.手动更改数据的函数)  # 表格内容改变的信号量
def 表格显示数据():
    self.ShowPosition.cellChanged.disconnect(self.手动更改数据的函数)  # 进入阻塞模式
    '''执行程序'''
    self.tableWidget.self.ShowPosition.cellChanged.connect(self.手动更改数据的函数)  # 退出阻塞模式
    # 退出槽函数
def 手动更改数据的函数():
    # 进入槽函数
	表格显示数据()

下面贴一下我的部分代码,仅供参考:

self.ShowPosition.cellChanged.connect(self.positionChange)  # 表格内容改变的信号量
def show_ui(self):
    # 此处断开连接,类似于原子操作或互斥,在设置表格时不允许发出改变的信号;表格完成,需要手动更改时,再打开连接
    self.ShowPosition.cellChanged.disconnect(self.positionChange)
    xxx	# 显示等操作
    self.ShowPosition.cellChanged.connect(self.positionChange)  # 打开连接
def positionChange(self):
	xxx # 获取改变的数据
	self.show_ui()
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QTableWidget中显示大数据量时,可以通过以下方式来优化和提高性能: 1. 使用分页加载:将大量数据分成多个页面,每次只加载当前页面的数据,这样可以减少内存的占用,并减少初始化时间。可以使用QPagingTableWidget这样的第三方插件来实现分页功能。 2. 惰性加载:只有当用户浏览到某一行时,才加载该行的数据,这样可以减少不必要的初始化,并且在浏览过程中保持响应性能。可以通过监听QTableWidget的滚动事件来实现惰性加载。 3. 使用模型-视图分离:将数据与显示分离,使用QTableView作为视图,利用QAbstractTableModel或者QStandardItemModel作为数据模型来管理数据。这样可以降低内存开销并提高性能。使用Qt提供的Model/View框架(例如QSqlTableModel或QSqlRelationalTableModel等)也能够更高效地处理大数据量。 4. 合理设置显示行数:根据具体需求,可以根据实际情况限制每次加载的行数,避免同时加载大量数据导致的性能问题。可以使用setRowCount()方法来控制显示的行数。 5. 调整QTableWidget的样式表:设置合适的字体、背景色以及行高等样式,可以提升界面的美观度和用户体验,同时也有助于提高加载大量数据时的渲染速度。 总之,在处理大数据量时,需要综合考虑内存、性能和用户体验的平衡,通过合理的分页、惰性加载、模型-视图分离、样式优化等方式,可以有效地在QTableWidget中显示大数据量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值