2013-02-27 2 views
0

정렬 및/또는 필터링으로 인해 관련 모델이 QSortFilterProxyModel으로 확장 된 일부 테이블 뷰를 사용하고 있습니다. 모든 행의 숫자를 제외하고 잘 작동합니다 (나는 수직 헤더를 의미). 이 코드를 사용 :QSortFilterProxyModel 및 행 번호

def headerData(self, section, orientation, role): 
    if role == QtCore.Qt.DisplayRole: 
     if orientation == QtCore.Qt.Horizontal: 
      return self.__header[section] 
     elif orientation == QtCore.Qt.Vertical: 
      return section + 1 

고정 행 번호는 각 행에 할당된다. 그리고 이것은 정렬/필터링 할 때 문제를 일으 킵니다. 한 가지 해결책을 찾았습니다. 기본 필터링 및 정렬 방법을 무시하고 추가 매개 변수 (행 번호)를 데이터에 넣고 각 정렬 또는 필터링 중에 다시 작성합니다.

질문 : 다른 해결책이 있습니까? 정렬/필터링 조작 후 실제 항목 위치를 보여주는 몇 가지 방법은 무엇입니까?

+0

당신이 정말 헤더로 그 필요하십니까? 모델에 '행 번호'라는 또 다른 열을 추가하면 훨씬 쉬울 것입니다. – Avaris

+0

예, 셀보다 헤더가 더 선호됩니다. 더 직관적으로 보입니다. – Miso

+0

기다려주십시오 ... 제가 오해했다고 생각합니다. 'QSortFilterProxyModel'은 실제로 원래의 숫자를 그대로 유지합니다. 하지만 너는 그걸 원하지 않니? 원본 행이 어디에 있던지에 상관없이 정렬 후에 행 번호가 '1'에서 'N'으로 바뀌길 원합니다. 맞습니까? – Avaris

답변

3

사용자 정의 headerDataQSortFilterProxyModel의 간단한 서브 클래스가 있다고 할 것입니다 :

class MyProxy(QtGui.QSortFilterProxyModel): 
    def headerData(self, section, orientation, role): 
     # if display role of vertical headers 
     if orientation == QtCore.Qt.Vertical and role == QtCore.Qt.DisplayRole: 
      # return the actual row number 
      return section + 1 
     # for other cases, rely on the base implementation 
     return super(MyProxy, self).headerData(section, orientation, role) 
+0

아니요, 정확하게는 아닙니다 - 예제에서 내 것과 동일한 세로 머리글에 초점을 맞추고 있습니다. – Miso

+0

@ 미소 : 알다시피, 이건'프록시'모델 맞지? – Avaris

+0

이것은 전체 예제 코드입니다. http://pastebin.com/TFzkYyJT – Miso