2017-10-26 1 views
0

QFileSystemModel과 함께 사용하고 QTreeView에 표시하는 사용자 정의 QSortFilterProxyModel 클래스가 있습니다. 다음을 수행해야합니다. 동일한 이름을 가진 폴더 및 파일 (파일 확장명 무시)이 있으면 폴더의 파일을이 파일에 도킹해야합니다. 예를 들어 Creatures.txt 파일과 Creatures 폴더에 두 개의 txt 파일이 있습니다. 마지막보기에서 숨기고 두 번째 그림과 같이 표시하고 싶습니다. 나의 이해 QSortFilterProxyModel으로 QSortFilterProxyModel에서 데이터 표현 구조를 변경하십시오.

enter image description here

enter image description here는 필터링하지 데이터 구조를 변경, 정렬에 사용됩니다. 또한 뷰포트에서 파일을 드래그 앤 드롭 할 필요가 있습니다.

답변

0

모델에서 항목의 가시성을 토글하는 플래그가 없기 때문에 이는 다소 까다 롭습니다.

대신 이러한 항목을 생략하는 자체 프록시 모델을 만들 수 있습니다. 즉, rowCount(), data(), flags() 등을 적절하게 다시 구현한다는 의미입니다.

그러나보기 측면에서 표시 유형을 변경하는 것이 좋으면 해결 방법으로 사용하기가 더 쉽습니다. 대신 QTreeView :: setRowHidden().

편집 : 아마도 QSortFilterProxyModel :: filterAcceptsRow()를 재정의하는 것이 더 쉽습니다.

+0

이미 항목 필터링을 위해 프록시 모델을 만들었습니다. 문제는 모델 구조 변경에 있습니다. – Kamanji

+0

@ 카만 지 부모, 행 및 열이 다른 QModelIndex를 반환해야합니다. 프록시 코드를 게시하면 많은 도움이됩니다. – eyllanesc

+0

@eyllanesc [Here] (https://pastebin.com/V6pe4DB9)는 filterAcceptRow 함수를 다시 구현 한 것입니다. 내가 가진 유일한 문제는 항목의 부모를 변경하는 것입니다. 프록시 모델을 사용하여이 작업을 수행 한 다음 원래 모델에서 색인을 검색 할 수 있다면 필요한 것입니다. 커스텀 itemModel을 구축 한 다음 그것에 모든 구조 조정을 할 생각도했습니다. – Kamanji

관련 문제