2011-08-12 2 views
2

내가 원하는 대화 상자를 사용하여 여러 폴더/디렉토리를 선택하면 다음과 같은 것을 달성하기 위해 :Qt는 -

enter image description here

내가 여러 드라이브에 걸쳐 여러 폴더를 선택하고 선택된 사람들의 폴더 경로를 검색 할 수 있습니다. Qt는 멀티플 폴더 선택 기능 만 갖고 있지만, 다른 드라이브 등에서 선택된 폴더를 지원하지 않습니다.

그런 대화 상자를 만드는 방법에 대해 누구라도 안내해 줄 수 있습니까? 더 좋은 방법은, 하나는 샘플 코드 I (이 오래된 프로젝트의 확장으로, 나는 차라리 내 시간을 절약 할 것이 아니라 바퀴를 다시 발명!) 사용할 수

감사

+1

독자적으로 코드를 작성해야한다고 생각합니다. – Donotalo

+0

사실,하지만 어떻게 접근해야하는지 알고 싶습니다. 하위 클래스 무엇을 구현합니까? 기타 – nf313743

답변

1

이 있는가 QTreeView에 파일 시스템을 나타내는 데 QFileSystemModel을 사용할 수 있습니다. This example은 어떻게하는지 설명합니다. this list archives에 따라 체크 박스 문제에 대한

, (내가 생각할 수있는 최소한)이 작업을 수행하는

가장 간단한 방법은 QDirModel를 서브 클래스 화해, 오버라이드 (override)하는 것입니다 flags, datasetData :

flags은 반환 된 플래그에 Qt::ItemIsUserCheckable을 추가해야합니다. data 롤 매개 변수가 Qt::CheckStateRole인 경우 쿼리 된 인덱스의 Qt::CheckState을 반환해야합니다.setData 인덱스

또는 더 나은, 이것은 QProxyModel 거의 같은 방법으로 (결국, "클래스 상속 이상의 찬성 개체 구성")와 함께 작동합니다의 체크 상태를 저장해야합니다.

QDirModel class은 더 이상 사용되지 않습니다. 더 새로운 Qt 버전에서는 사용하지 못할 수도 있습니다. QFileSystemModel을 사용하는 것이 좋습니다.

0
####### Retrieve a list of directories with wxPython-Phoenix - tested on python3.5 
### installation instruction for wxPython-Phoenix : https://wiki.wxpython.org/How%20to%20install%20wxPython#Installing_wxPython-Phoenix_using_pip 
### modified from : https://wxpython.org/Phoenix/docs/html/wx.lib.agw.multidirdialog.html 
import os 
import wx 
import wx.lib.agw.multidirdialog as MDD 

# Our normal wxApp-derived class, as usual 
app = wx.App(0) 
dlg = MDD.MultiDirDialog(None, title="Custom MultiDirDialog", defaultPath=os.getcwd(), # defaultPath="C:/Users/users/Desktop/", 
         agwStyle=MDD.DD_MULTIPLE|MDD.DD_DIR_MUST_EXIST) 

if dlg.ShowModal() != wx.ID_OK: 
    print("You Cancelled The Dialog!") 
    dlg.Destroy() 


paths = dlg.GetPaths() 

#Print directories' path and files 
for path in enumerate(paths): 
    print(path[1]) 
    directory= path[1].replace('OS (C:)','C:') 
    print(directory) 
    for file in os.listdir(directory): 
     print(file) 

dlg.Destroy() 
app.MainLoop()