我需要选择一个包含文件“ * .in”的目录。但是,如果使用getExistingDirectory
,则无法指定文件过滤器,因此看不到文件。
但是我只需要查看“ * .in”文件,我只能选择目录,而不是文件。现在我使用此代码:
qDebug() << QFileDialog::getExistingDirectory(this, tr("Выберите папку с файлами устройств"), "", QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
而且我看不到所选目录中的任何文件(在对话框中)。
我该怎么做?
您需要通过QFileDialog::DontUseNativeDialog
选项。从以下文档中getExistingDirectory
:
在Windows和OS X上,此静态函数将使用本机文件对话框而不使用QFileDialog。但是,本机Windows文件对话框不支持在目录选择器中显示文件。您需要传递DontUseNativeDialog来使用QFileDialog显示文件。在Windows CE上,如果设备没有本机文件对话框,则将使用QFileDialog。
要按扩展名过滤显示的文件,您将需要做更多的事情:
QFileDialog dlg(nullptr, tr("Choose Directory"));
dlg.setOptions(QFileDialog::DontUseNativeDialog | QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
dlg.setFileMode(QFileDialog::Directory);
dlg.setNameFilter(tr("Directories with device files (*.in)"));
if (dlg.exec())
qDebug() << dlg.selectedFiles();
当我尝试此操作时,仍会显示与过滤器不匹配的文件,但显示为灰色(我在MacOS上尝试过,也许您在Windows上会有更多的运气)。
没有阻止用户选择不包含与过滤器匹配的文件的文件夹的标准方法。一种解决方案是从您自己的类派生QFileDialog
并覆盖该accept
函数(不QFileDialog::accept
从覆盖中调用将阻止对话框关闭)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句