您需要通过QFileDialog::DontUseNativeDialog
选项。从getExistingDirectory
的documentation:
在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
将阻止对话框关闭)。
改为使用getOpenFileName。 – 2016-02-13 21:52:21