[英]How to specify the QFileDialog::getExistingDirectory() method?
[英]QFileDialog::getExistingDirectory does not close after choosing a folder
在Qt中
QFileDialog *dlg = new QFileDialog();
QDir dir = dlg->getExistingDirectory(this, tr("Choose folder"), qgetenv("HOME"));
打开一个文件夹选择对话框。 选择文件夹(按“选择”按钮)后,该文件夹不会自动关闭。 所以我尝试过:
if(dlg->close() == true) delete(dlg);
当我调试时,dlg-> close()返回true,并且命中了代码delete(dlg)。 文件夹选择器对话框仍然没有关闭。
我正在使用Ubuntu 11.10 64位操作系统。 从存储库中使用Qt库。
我的最终目的只是显示一个文件夹选择器对话框,选择文件夹后,该对话框应关闭。 之后,处理应继续。 这个怎么做?
提前致谢。
即使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()) ...
)。
getExistingDirectory(...)
是静态函数。
要添加到cmannett85的答案:
您不应该创建QDialog
的实例。 如果这样做,则由您自行隐藏。 修改代码以读取
const QString home = QDesktopServices::storageLocation(QDesktopServices::HomeLocation);
const QDir dir = QFileDialog:getExistingDirectory(this, tr("Choose folder"), home);
此代码应相对可移植。 qgetenv("HOME")
是特定于Unix的。 您不应该在基于Qt的项目中引入特定于平台的免费代码-这样做有悖于首先使用Qt的目的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.