나는 디렉터리 구조와 파일을 검사하는 pyqt 응용 프로그램을 만들려고합니다. 내가하고 싶은 일은 qfilesystemmodel의 항목에 몇 가지 추가 정보를 추가하는 것입니다 (예 : 파일에 'checked'또는 'unchecked'로 태그 지정). 모델의 각 항목 (파일 또는 폴더)에 네 개의 열, 이름, 크기, 타임 스탬프 및 유형이 있음을 발견했습니다. 항목에 맞춤 정보 (태그)가 포함 된 다섯 번째 열을 만들 수 있습니까? 또는 모델의 항목에 대한 추가 정보에 주석을 달 수있는 방법이 있습니까? 그렇지 않으면 태그를 유지하기 위해 qstanarditemmodel과 같은 다른 모델이 있어야한다고 생각합니다. 그러나 나는 그것이 그것이 절망적 인 모델이되기를 원하지 않는다. 감사합니다.qfilesystemmodel 항목에 여분의 데이터를 추가하는 방법은 무엇입니까?
답변
QFileSystemModel
클래스는 라이브 파일 시스템에 위임합니다. 따라서 실제로는 에 정보를 추가 할 수있는 모든 항목이 포함되어 있지 않습니다. 항목은 실제로 파일 시스템 내의 파일 및 디렉토리입니다.
이 경우, 추가 정보를 보유하려면 두 번째 데이터 구조가 필요합니다. 그렇지 않으면 파일과 디렉토리 자체에 정보를 어떻게 든 저장해야합니다. 이는 특정 파일 유형 (예 : 이미지)에서 가능할 수 있습니다. 그러나 임의의 파일 유형에 대해서는이 작업을 수행하는 것이 명백히 불가능합니다.
서브 클래스 QFileSystemModel
및 reimplement 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)
기본 데이터에 대한 액세스가 없으면 모델 상속이 취약하여 쉽게 중단됩니다. –
'QModelIndex'는 제거 가능한 객체라는 것을 기억하십시오. 절대 경로 이름을 가진 데이터를 해시의 키로 저장할 수는 있지만 허약합니다. 이름 변경, 삭제 및 이동은 처리하지 않습니다. –
@JonHarper. 내 거친 예제를주의 깊게 살펴보면 기본 데이터에는 전혀 영향을주지 않습니다. 효과적으로, 단지'QFileSystemModel'에 위임합니다. 분명히'QModelIndex' 인스턴스를 저장하는 것은 현명하지 않습니다. 필요하다면 [QPersistentModelIndex] (http://doc.qt.io/qt-4.8/qpersistentmodelindex.html)를 사용하십시오. 보조 데이터 구조가 여분의 열 또는 두 개를 추가하기 위해 파일 시스템 모델에 연결될 수없는 이유는 없습니다. 간단하지는 않지만 신중하게 생각하면 확실한 방법으로 할 수 있습니다. – ekhumoro
요컨대, 쉽지 않습니다. 복잡성 때문에 Qt 개발자가 QFileSystemModel
에서 작업을 중단했습니다. 기본적으로 백엔드 파일 시스템 엔진은 너무 복잡하고 약해서 QFileSystemModel
은 전적으로 의존합니다.
당신
은QFileSystemModel
구현할 수 있지만, 그것은 고통스러운 일이
많은이 필요하고 민간 헤더를 액세스하는 것입니다.
네, 그게 아니라고 생각합니다. –
- 1. wx.TreeCtrl 항목에 여분의 데이터를 추가하는 방법은 무엇입니까? wxpython
- 2. android.widget.SearchView에 여분의 데이터를 추가하는 방법?
- 3. 템플릿에 표시하기 위해 장고 모델에 여분의 데이터를 추가하는 방법은 무엇입니까?
- 4. dotnetopenauth - 새로 고침 토큰에 여분의 데이터를 추가하는 방법은 무엇입니까?
- 5. LinqDataSource에서 여분의 데이터를 추출하는 방법은 무엇입니까?
- 6. 대화 상자에 여분의 데이터를 넣는 방법은 무엇입니까?
- 7. dll에 여분의 데이터를 저장하는 방법은 무엇입니까?
- 8. 클래스를 클릭 한 항목에 추가하는 방법은 무엇입니까?
- 9. GTK #의 항목에 아이콘을 추가하는 방법은 무엇입니까?
- 10. select2에서 선택한 항목에 텍스트를 추가하는 방법은 무엇입니까?
- 11. 기존 목록 항목에 기본값을 추가하는 방법은 무엇입니까?
- 12. 메뉴 항목에 스크롤 막대를 추가하는 방법은 무엇입니까?
- 13. NSToolbar 항목에 팝업 메뉴를 추가하는 방법은 무엇입니까?
- 14. 메뉴 항목에 액세스 키를 추가하는 방법은 무엇입니까?
- 15. 배열에서 SortedSet 항목에 추가하는 방법은 무엇입니까?
- 16. 안드로이드의 ListView 항목에 CheckBox를 추가하는 방법은 무엇입니까?
- 17. 런타임시 리피터 항목에 속성을 추가하는 방법은 무엇입니까?
- 18. tkinter의 항목에 자리 표시자를 추가하는 방법은 무엇입니까?
- 19. PyQt5에서 QFileSystemModel dataChanged 신호를 연결하는 방법은 무엇입니까?
- 20. MySQL - 데이터베이스의 모든 항목에 데이터를 추가하는 명령?
- 21. 여분의 statusstripbar를 제거하는 방법은 무엇입니까?
- 22. plist에 데이터를 추가하는 방법은 무엇입니까?
- 23. DataGridRowGroupHeader에 데이터를 추가하는 방법은 무엇입니까?
- 24. NSKeyedArchive에 데이터를 추가하는 방법은 무엇입니까?
- 25. 데이터를 추가하는 방법은 무엇입니까? 파일
- 26. NSOutputStream에 데이터를 추가하는 방법은 무엇입니까?
- 27. 카산드라에 데이터를 추가하는 방법은 무엇입니까?
- 28. 데이터베이스에 데이터를 추가하는 방법은 무엇입니까?
- 29. QFileSystemModel setRootPath
- 30. PyQt는 : QFileSystemModel
QIdentityProxyModel을 찾고 있습니다. – peppe
@Bahrom 감사합니다. –
@peppe 고마워, 내가 찾겠다. –