选择文件夹后,QFileDialog :: getExistingDirectory不会关闭

时间:2012-07-01 19:18:44

标签: qt qfiledialog

在Qt中,

QFileDialog *dlg = new QFileDialog(); 
QDir dir = dlg->getExistingDirectory(this, tr("Choose folder"), qgetenv("HOME"));

打开文件夹选择对话框。选择文件夹后(按选择按钮),文件夹不会自动关闭。所以我试过了:

if(dlg->close() == true) delete(dlg);

当我调试dlg-> close()返回true并且命中了删除代码(dlg)。文件夹选择器对话框仍未关闭。

我正在使用Ubuntu 11.10 64位操作系统。使用存储库中的Qt库。

我的最终目的是显示文件夹选择器对话框,一旦选择了文件夹,对话框应该关闭。之后,处理应该继续。怎么做?

提前致谢。

3 个答案:

答案 0 :(得分:6)

即使QFileDialog::getExistingDirectory是静态的并且不需要QFileDialog对象,它也应该在最终选择目录时关闭对话框窗口。 默认情况下,该函数会尝试打开本机文件对话框窗口,这似乎会在某些平台上引起一些问题。

您应该尝试通过添加选项DontUseNativeDialog来强制执行非原生对话:

QString dir = QFileDialog::getExistingDirectory(
    this, 
    tr("Choose folder"),
    QDesktopServices::storageLocation(QDesktopServices::HomeLocation),
    QFileDialog::ShowDirsOnly | QFileDialog::DontUseNativeDialog);

并删除另外两行(new QFileDialogif(dlg->close()) ...)。

答案 1 :(得分:1)

getExistingDirectory(...)是一个静态函数。

答案 2 :(得分:0)

添加到cmannett85的答案:

您不应该创建QDialog的实例。如果你这样做,你可以隐藏它。修改您的代码以阅读

const QString home = QDesktopServices::storageLocation(QDesktopServices::HomeLocation);
const QDir dir = QFileDialog:getExistingDirectory(this, tr("Choose folder"), home);

此代码应该相对便携。 qgetenv("HOME")是特定于Unix的。您不应该在基于Qt的项目中引入特定于平台的特定代码 - 它首先会破坏使用Qt的目的。