2016-07-14 7 views
1

나는 디렉터리 구조와 파일을 검사하는 pyqt 응용 프로그램을 만들려고합니다. 내가하고 싶은 일은 qfilesystemmodel의 항목에 몇 가지 추가 정보를 추가하는 것입니다 (예 : 파일에 'checked'또는 'unchecked'로 태그 지정). 모델의 각 항목 (파일 또는 폴더)에 네 개의 열, 이름, 크기, 타임 스탬프 및 유형이 있음을 발견했습니다. 항목에 맞춤 정보 (태그)가 포함 된 다섯 번째 열을 만들 수 있습니까? 또는 모델의 항목에 대한 추가 정보에 주석을 달 수있는 방법이 있습니까? 그렇지 않으면 태그를 유지하기 위해 qstanarditemmodel과 같은 다른 모델이 있어야한다고 생각합니다. 그러나 나는 그것이 그것이 절망적 인 모델이되기를 원하지 않는다. 감사합니다.qfilesystemmodel 항목에 여분의 데이터를 추가하는 방법은 무엇입니까?

+0

QIdentityProxyModel을 찾고 있습니다. – peppe

+0

@Bahrom 감사합니다. –

+0

@peppe 고마워, 내가 찾겠다. –

답변

0

QFileSystemModel 클래스는 라이브 파일 시스템에 위임합니다. 따라서 실제로는 정보를 추가 할 수있는 모든 항목이 포함되어 있지 않습니다. 항목은 실제로 파일 시스템 내의 파일 및 디렉토리입니다.

이 경우, 추가 정보를 보유하려면 두 번째 데이터 구조가 필요합니다. 그렇지 않으면 파일과 디렉토리 자체에 정보를 어떻게 든 저장해야합니다. 이는 특정 파일 유형 (예 : 이미지)에서 가능할 수 있습니다. 그러나 임의의 파일 유형에 대해서는이 작업을 수행하는 것이 명백히 불가능합니다.

서브 클래스 QFileSystemModelreimplement the usual methods은 추가 열을 추가 할 수 있어야합니다. 최소한으로는 columnCount()data()을 다시 구현해야합니다. 그러나 분명히 이것에 대한 정확한 세부 정보는 추가 정보를 보유하기로 선택한 데이터 구조에 따라 달라집니다. 매우 대략적으로 다음과 같이 보일 수 있습니다.

class FileSystemModel(QFileSystemModel): 
    def __init__(self, parent=None): 
     super(FileSystemModel, self).__init__(parent) 
     self._data = DataStructure() 

    def columnCount(self, parent): 
     return super(FileSystemModel, self).columnCount(parent) + 1 

    def data(self, index, role): 
     if index.isValid() and index.column() == self.columnCount() - 1: 
      if role == QtCore.Qt.DisplayRole: 
       # return the relevant additional data 
      elif role == QtCore.Qt.CheckStateRole: 
       # etc, etc 
     else:   
      return super(FileSystemModel, self).data(index,role) 
+0

기본 데이터에 대한 액세스가 없으면 모델 상속이 취약하여 쉽게 중단됩니다. –

+0

'QModelIndex'는 제거 가능한 객체라는 것을 기억하십시오. 절대 경로 이름을 가진 데이터를 해시의 키로 저장할 수는 있지만 허약합니다. 이름 변경, 삭제 및 이동은 처리하지 않습니다. –

+0

@JonHarper. 내 거친 예제를주의 깊게 살펴보면 기본 데이터에는 전혀 영향을주지 않습니다. 효과적으로, 단지'QFileSystemModel'에 위임합니다. 분명히'QModelIndex' 인스턴스를 저장하는 것은 현명하지 않습니다. 필요하다면 [QPersistentModelIndex] (http://doc.qt.io/qt-4.8/qpersistentmodelindex.html)를 사용하십시오. 보조 데이터 구조가 여분의 열 또는 두 개를 추가하기 위해 파일 시스템 모델에 연결될 수없는 이유는 없습니다. 간단하지는 않지만 신중하게 생각하면 확실한 방법으로 할 수 있습니다. – ekhumoro

0

요컨대, 쉽지 않습니다. 복잡성 때문에 Qt 개발자가 QFileSystemModel에서 작업을 중단했습니다. 기본적으로 백엔드 파일 시스템 엔진은 너무 복잡하고 약해서 QFileSystemModel은 전적으로 의존합니다.

당신

QFileSystemModel 구현할 수 있지만, 그것은 고통스러운 일이 많은이 필요하고 민간 헤더를 액세스하는 것입니다.

+0

네, 그게 아니라고 생각합니다. –

관련 문제