14

有没有办法在 Qt 中打开文件夹浏览器对话框?当我使用QFileDialog文件Directory模式时,即使我指定了ShowDirsOnly选项,我也会得到标准文件对话框。我更喜欢使用一个对话框,要求用户从目录树中选择一个目录。

这是我正在使用的 PySide 代码:

from PySide import QtGui
app = QtGui.QApplication([])
dialog = QtGui.QFileDialog()
dialog.setFileMode(QtGui.QFileDialog.Directory)
dialog.setOption(QtGui.QFileDialog.ShowDirsOnly)
dialog.exec_()

这是我在 Windows 7 上得到的结果: 文件选择对话框

4

4 回答 4

12

看来你打电话的顺序很setFileMode()重要setOption()。确保你setFileMode()先打电话:

QFileDialog dialog;
dialog.setFileMode(QFileDialog::Directory);
dialog.setOption(QFileDialog::ShowDirsOnly);
...
于 2012-11-08T23:07:57.187 回答
5

我知道,我的答案有些棘手,看起来像小技巧,但是QFileDialog静态方法(例如getExistingDirectory()使用本机对话框),因此只能进行有限的自定义。

但是,如果您创建一个QFileDialog实例,您将获得一个可以自定义的对话框——只要您对实时对话框感到满意。

例如,这应该显示一个树形视图,其中包含您可以选择的可扩展目录(希望,将此代码移植到 PySide 一定不是问题):

QFileDialog *fd = new QFileDialog;
QTreeView *tree = fd->findChild <QTreeView*>();
tree->setRootIsDecorated(true);
tree->setItemsExpandable(true);
fd->setFileMode(QFileDialog::Directory);
fd->setOption(QFileDialog::ShowDirsOnly);
fd->setViewMode(QFileDialog::Detail);
int result = fd->exec();
QString directory;
if (result)
{
    directory = fd->selectedFiles()[0];
    qDebug()<<directory;
}

从这里得到那个方法

于 2012-11-09T09:16:50.727 回答
3

试试这行代码,它会显示一个文件夹浏览对话框:

 ui->txtSaveAddress->setText(folderDlg.getExistingDirectory(0,"Caption",QString(),QFileDialog::ShowDirsOnly));

在此处输入图像描述

于 2013-05-29T09:19:17.513 回答
3

这对我有用:

def getDir(self):
    dialog = QtGui.QFileDialog()
    dialog.setFileMode(QtGui.QFileDialog.Directory)
    dialog.setOption(QtGui.QFileDialog.ShowDirsOnly)
    directory = dialog.getExistingDirectory(self, 'Choose Directory', os.path.curdir)
于 2014-11-19T21:43:21.317 回答