我有一个使用自定义QStyledItemDelegate,QTableView和QAbstractModel的GUI来显示我在启动时加载的记录。
每条记录显示为一行小部件。每列都与特定的窗口小部件类型相关联。即一个QDateEdit,一个QTimeEdit,几个QLineEdit,3个QComboBox。
如果我尝试加载约2500条记录,则GUI需要花费很多时间来加载,并且在使用某些过滤器时也要适应更改。滚动并不算太糟糕,所以我怀疑在添加或删除小部件行时,我的工作效率可能不高。
行添加始终是一个追加。行删除无处不在。
这些是我模型中的实现:
def row_append(self, count=1, parent=QtCore.QModelIndex()):
rows = self.rowCount()
last = rows + count - 1
self.layoutAboutToBeChanged.emit()
self.beginInsertRows(parent, rows, last)
self.insertRows(rows, count, parent) # Implemented in my model
self.endInsertRows()
self.layoutChanged.emit()
for column in range(self.columnCount()):
self.table_view.enable_cell(rows, column)
return self.rowCount() - count
def row_delete(self, row, count=1, parent=QtCore.QModelIndex()):
last = row + count - 1
self.layoutAboutToBeChanged.emit()
self.beginRemoveRows(parent, row, last)
self.removeRows(row, count, parent) # Implemented in my model
self.endRemoveRows()
self.layoutChanged.emit()
我的insertRows和removeRows版本的实现细节不相关,因为我可以解决。
如果我收到500次插入或351次删除,则将调用这些函数。
我的问题是,当您收到大量导致当前显示的大部分内容发生变化的事物时,是否应该这样做?
我记得读过一篇文章,如果您必须进行重大更改,那么破坏所有内容并从头开始重建可能会更容易,但是: