2014-12-06 71 views
0

我使用QSortFilerProxyModel我QTableView中,我初始化這樣說:QSortFilterProxyModel排序時,沒有必要

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

我QTableView中使用了一個模型,與像日記,標題,以及新的一些領域。當我點擊一行時,如果「new」爲True,那麼我修改模型,並將new設置爲False。

我的問題是當我排序我的行與「日記」字段。有些行具有相同的日誌,如果我點擊「新」行(觸發模型更改),代理將以不同的方式對行進行排序,但我沒有要求它。

只有在修改模型時纔會出現此行爲。所以,我需要一種避免模型更新後更新QSortFilterProxyModel的方法。我的模型是一個QSqlTableModel。

可能嗎?

編輯:實際上,我的代理在每次模型更新後進行排序,並且每次使用相同值比較單元格時,它都會以不同的排序順序結束。這不是預期的行爲。

回答

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) 

現在它完美的工作。