QTableWidget加载大量数据不卡顿

最近在模仿网易云音乐的UI,积累自己的代码能力,在使用QTabbleWidget的时候发现加载大量数据会导致卡顿,这个不能忍。

原因

  1. 设置了自适应宽度
	// item 水平表头自适应大小
	tab->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
	// item 垂直表头自适应大小
	ui->tableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);
 	//试着设置为:  QHeaderView::Fixed 看看是否还会卡顿
  1. 加载的数据太大

解决方案

  1. QTableView 配合 Model (推荐)
  2. 我们知道 QTableWidget 每次显示的数据有限(屏幕只有这么大),我们利用这一点来实现动态加载item,解决卡顿的问题
  3. 使用事件过滤器,或者 重写鼠标事件,
	//需要重写的虚函数
	virtual void wheelEvent(QWheelEvent* event)
	//事件过滤器
	virtual bool eventFilter(QObject* obj, QEvent* event)

举例说明

1.我们首先先加载一定量的数据,这样就不会卡了。
2.为了防止越界,每次循环我们都应该判断一下
3.用一个 curtableindex 来记录当前数据的位置,方便之后加载剩余的数据

void SongMenu::loadData()
{
   
	int len = taglsit.length();
	for (int i = 0; i != 20; ++i) {
   
		if (i >= len)return;
		ui->tab_SongTable->insertRow(i);
		//添加窗口小部件
		ui->tab_SongTable->setCellWidget(i, 0, base->
`QTreeWidget` 和 `QTreeView` 都是Qt中的控件,用于展示树形数据结构,但它们在某些情况下可能会表现出不同的性能。`QTreeWidget` 通常更适合显示大量嵌套的数据,因为它能更有效地处理层次结构,并允许用户直接在子节点上展开和折叠。然而,这也会带来额外的内存开销和绘制复杂性。 有几个可能的原因导致 `QTreeWidget` 在特定场景下会显得卡顿: 1. **内存消耗**:对于大量的节点,`QTreeWidget` 需要为每个节点存储额外的信息,如图标、文本等,如果数据量大,内存管理不当可能导致性能下降。 2. **渲染效率**:`QTreeWidget` 可能会频繁地更新视图,尤其是在用户频繁展开和折叠节点时,这可能导致重绘操作较多,影响UI响应速度。 3. **事件处理**:由于它的交互性更强(比如可以点击子节点),事件处理的复杂性也更高,可能导致处理速度变慢。 4. **数据模型优化**:如果数据模型没有被高效地组织或优化,比如使用了不合适的模型(如QStandardItemModel),也可能影响性能。 为了改善 `QTreeWidget` 的性能,可以尝试以下策略: - 优化数据模型,减少冗余信息和内存占用。 - 利用Qt的智能指针和内存管理,及时释放不再使用的节点。 - 对于复杂的交互场景,可以考虑使用虚拟化技术,仅显示可见部分的数据,而不是一次性加载所有数据。 - 使用适当的样式和自定义扩展,减少绘制复杂度。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值