QSortFilterProxyModel在不必要时排序

时间:2014-12-06 15:42:02

标签: python sorting model pyqt

我在QTableView中使用了QSortFilerProxyModel,我用这种方式初始化它:

self.proxy = QtGui.QSortFilterProxyModel()
self.proxy.setSourceModel(self.model)
self.proxy.setDynamicSortFilter(True)

我的QTableView使用了一个模型,其中包括日记,标题和新内容等字段。当我点击一行时,如果" new"是的,我修改模型,并将new设置为False。

我的问题是当我使用字段" journal"对行进行排序时。有些行具有相同的日志,如果我点击" new"行(触发模型更改),代理以不同的方式对行进行排序,而我没有要求它。

仅当我修改模型时才会出现此行为。因此,我需要一种方法来避免在模型更新后更新QSortFilterProxyModel。我的模型是QSqlTableModel。

有可能吗?

编辑:实际上,我的代理在每次模型更新后进行排序,每次比较具有相同值的单元格时,它都会以不同的排序顺序结束。这不是预期的行为。

1 个答案:

答案 0 :(得分:0)

我终于找到了答案。

实际上,通过单击标题对行进行排序会破坏代理。所以我将代理子类化了:

from PyQt4 import QtGui


class ProxyPerso(QtGui.QSortFilterProxyModel):

    def __init__(self, parent):
        super(ProxyPerso, self).__init__(parent)

        self.parent = parent

    def sort(self, column, order):
        super(ProxyPerso, self).sort(column, order)

        self.parent.proxy.setSourceModel(self.parent.modele)
        self.parent.tableau.setModel(self.parent.proxy)

现在它完美无缺。