Qt - 使用对话框选择多个文件夹/目录

时间:2011-08-12 11:32:50

标签: qt folderbrowserdialog

我希望实现以下内容:

enter image description here

我可以在多个驱动器中选择多个文件夹并检索所选文件夹的路径。 Qt只有粗略的多文件夹选择功能,但它不支持其他驱动器等选定的文件夹。

有人可以指导我如何创建这样的对话框吗?更好的是,是否有人可以使用任何示例代码(这是旧项目的扩展,我宁愿节省时间而不是重新发明轮子!)

谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用QFileSystemModel代表QTreeView上的代表文件系统。 This example解释了如何做到这一点。

对于复选框问题,根据this list archives

  

最简单的方法(我能想到,至少)是子类   QDirModel并覆盖flagsdatasetData

     

flags应将Qt::ItemIsUserCheckable添加到返回的标志中   如果角色参数为data,则Qt::CheckState应返回查询索引的Qt::CheckStateRole   setData应存储索引的检查状态

     

或者,甚至更好,这应该适用于QProxyModel   同样的方式(毕竟,“赞成对象组成而不是上课   继承“)。

请注意,QDirModel class已过时。您可能不会在较新的Qt版本上使用它。我建议使用QFileSystemModel

答案 1 :(得分: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()