我有一个大约 1000 行的模型,其中一列每秒都在变化。我在真实模型和表格视图之间放置了一个自定义排序/过滤模型,以便在行更改后立即进行过滤。
现在问题来了:如果在表格视图中没有选择任何内容,那么一切正常;但是当我选择了一些行时,表格变得滞后。选择的行越多,滞后越多。
为什么?希望有人能给我提示,在此先感谢!
我有一个大约 1000 行的模型,其中一列每秒都在变化。我在真实模型和表格视图之间放置了一个自定义排序/过滤模型,以便在行更改后立即进行过滤。
现在问题来了:如果在表格视图中没有选择任何内容,那么一切正常;但是当我选择了一些行时,表格变得滞后。选择的行越多,滞后越多。
为什么?希望有人能给我提示,在此先感谢!
在为启用了选择的表格绘制(顶部)标题时,函数:
bool QItemSelectionModel::isColumnSelected(int column, const QModelIndex &parent) const
被调用(每列两次 - 但可能因选择模式而异)。此函数遍历所有选定的行(“qitemselectionmodel.cpp”Qt 4.8.5 中的第 1333 行)。因此,如果选择了许多行,每个标题列的绘制将变得非常缓慢。
与列/行切换的左标题相同。
被调用的函数大多不是虚拟的——所以如果不完全绘制自己的标题或隐藏标题,似乎没有办法避免这种情况。
也许 Qt 应该对此进行优化。
抱歉,QTableView 中有很多潜在的性能下降的地方。
查明减速的最简单方法是分析应用程序。如果您有占用 cpu 的调用,那么推断出原因并修复它要简单得多。
此外,您对自定义排序/过滤器代理的设计也没有多说。如果您使用 QSortFilterProxyModel 请注意它不能很好地扩展。