如何优化QTableView的性能

如何优化QTableView的性能,第1张

1、手动设置定长的表头数据。比如表头可能出现的数据是1到100000,那么我们就以最长的为标准,不够长度的补空格。这样不用需要设置自适应,表格刷新和切换可以瞬间完成。但代价是表头很丑,在数据小时有大片空白2、使用当前最大的表头数据,仅对该数据用QFontMetrics计算宽度,然后对表头设置fixedWidth()。这样理论可行,然而实际很丑陋,调整宽度后多出来的部分只有QWidget底色,文本信息并没有绘制上去,导致表头文本显示不完全,且表头效果绘制错误。然后尝试搜索了"QTableView VerticalHeader width"关键字之后,在Qt论坛搜到一篇帖子,里面给了一个脑洞清奇的解法——设置表头宽度后,将首列宽度设置为0,再重置,即代码如下:ui->tableView->verticalHeader()->setFixedWidth(width)

width = ui->tableView->columnWidth(0)

ui->tableView->setColumnWidth(0, 0)

ui->tableView->setColumnWidth(0, width)

上述代码,会导致表格布局改变,从而触发表格的全局重绘,在这次重绘里,重设宽度过后的表头也能正常显示了。由于所有column和表头都没有设置自适应,所以这个重绘效率很高。最后profile结果如下: - 在设置自适应后,表格刷新耗时10ms内。但若要重新适配表头,则需要耗时10s左右。 - 关闭自适应,通过手动设置fixedWidth方式适配表头,数据刷新加适配表头,总体耗时不超过20ms。

QHeaderView *headerView = tableView->verticalHeader()

headerView->setHidden(true)

QStringList header

header<<tr("Name")<<tr("Path")<<tr("随便改")

tableView->setHorizontalHeaderLabels(header)

在自定义QHeaderView的构造函数中加上:

原因:

(1)当QHeaderView的clickableSections属性为true时,表头才能响应点击事件。

(2)QHeaderView的clickableSections属性并没有在QHeaderView的初始化构造中默认设置为true,而是在QTableView等构造初始化时,构建默认的表头后通过setSectionsClickable(true)显式地设置为true,因此用自定义的QHeaderView代替QTableView的默认表头后,不会响应表头点击事件。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/11355346.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存