【问题标题】:QSortFilterProxyModel sorts when not necessaryQSortFilterProxyModel 在不需要时进行排序
【发布时间】:2014-12-06 15:42:01
【问题描述】:

我将 QSortFilerProxyModel 与我的 QTableView 一起使用,并以这种方式对其进行初始化:

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

我的 QTableView 使用一个模型,其中包含一些字段,如期刊、标题和新。当我点击一行时,如果“new”为True,我修改模型,并将new设置为False。

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

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

有可能吗?

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

【问题讨论】:

    标签: python sorting model pyqt


    【解决方案1】:

    我终于自己找到了答案。

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

    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)
    

    现在它可以完美运行了。

    【讨论】:

      猜你喜欢
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      • 2021-10-01
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 2014-09-19
      相关资源
      最近更新 更多