我用的是QTableView和PyQt5。一旦我开始显示几千行,性能就很糟糕。我尝试了this question的建议,但是Qt框架和QTreeView对我来说并不可行。是否有人对优化QTableView的性能有其他想法?
发布于 2018-06-20 08:16:09
您可以通过实现QTreeView的setUniformRowHeights来反映sizeHintForRow的效果。
class UniformRowHeights(QTableView):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._row_height = None
def sizeHintForRow(self, row):
model = self.model()
if row < 0 or row >= model.rowCount():
# Mirror super implementation.
return -1
return self.get_row_height()
def get_row_height(self):
if self._row_height is None:
self._row_height = max(self._get_cell_heights())
return self._row_height
def changeEvent(self, event):
# This for instance happens when the style sheet changed. It may affect
# the calculated row height. So invalidate:
self._row_height = None
super().changeEvent(event)
def _get_cell_heights(self, row=0):
self.ensurePolished()
option = self.viewOptions()
model = self.model()
for column in range(model.columnCount()):
index = model.index(row, column)
delegate = self.itemDelegate(index)
if delegate:
yield delegate.sizeHint(option, index).height()https://stackoverflow.com/questions/50943356
复制相似问题