我的程序有一个 QTableView,它显示来自 sqlite 数据库的数据。由于我的程序将用于对视频文件进行排序,而不是太多,我修改了模型的 select 方法,将所有数据库加载到内存中,而不是 255 个条目(默认情况下)。它运作良好,但是:
我还有一个个人标题,我可以单击它以按修改日期、姓名和投票对条目进行排序。让我们承认,我通过修改数据对数据进行排序,而没有尝试修改任何内容:它有效,所有内容都已排序。但是如果修改一个单元格,例如名称,会发生以下情况:
- 该程序加载 255 个条目,按日期对它们进行排序,然后显示它们
- 它加载 255 个其他条目,按日期对它们进行排序,然后显示它们
- ETC
修改后,再次尝试按数据排序,一切正常。但在每次修改时,程序只加载 255 个条目。基本上,我错过了一个回调(在您更新某些内容后被调用的回调)。
我不知道我是否必须修复视图或模型。你有想法吗 ?
在我的应用程序中,我可以使用视图的一些功能来修复它:
column_sorted = self.tableau.horizontalHeader().sortIndicatorSection()
order = self.tableau.horizontalHeader().sortIndicatorOrder()
if column_sorted is not None:
self.tableau.sortByColumn(column_sorted, order)
else:
pass
但我更喜欢更通用的方法。
这是对我的数据库进行修改的一段代码:
def voter(self):
self.bdd.close()
liste.vote(self.current_video)
self.bdd.open()
self.modele.select()
但是每个修改数据库的函数都会出现问题。我想补充一点,我使用的是 QSortProxyFilter:
self.proxy = QtGui.QSortFilterProxyModel()
self.proxy.setSourceModel(self.modele)
对不起,如果我不清楚,但很难描述这个错误,我的应用程序开始变大(~3000 行)。