在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库。
我的最终目的是显示文件夹选择器对话框,一旦选择了文件夹,对话框应该关闭。之后,处理应该继续。怎么做?
提前致谢。
答案 0 :(得分:6)
即使QFileDialog::getExistingDirectory
是静态的并且不需要QFileDialog
对象,它也应该在最终选择目录时关闭对话框窗口。
默认情况下,该函数会尝试打开本机文件对话框窗口,这似乎会在某些平台上引起一些问题。
您应该尝试通过添加选项DontUseNativeDialog
来强制执行非原生对话:
QString dir = QFileDialog::getExistingDirectory(
this,
tr("Choose folder"),
QDesktopServices::storageLocation(QDesktopServices::HomeLocation),
QFileDialog::ShowDirsOnly | QFileDialog::DontUseNativeDialog);
并删除另外两行(new QFileDialog
和if(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的目的。