首页 > 解决方案 > QFileDialog:是否可以仅过滤可执行文件(在 Linux 下)?

问题描述

我想使用 QFileDialog 让用户选择一个可执行文件。除目录外,该对话框应仅显示实际的可执行文件。

我的 Windows 版本运行良好,只需检查扩展名是否为 exe。但是,在 Linux 中,我无法按照自己的意愿进行操作。

在 C++ 中,我的尝试如下所示:

QString target_dir = ...
QFileDialog file_dialog;
file_dialog.setFilter(QDir::Executable | QDir::Files);
QString file = file_dialog.getOpenFileName(this, tr("Open Exectuable"), target_dir);

但是,此代码会导致显示所有文件。

我尝试添加一些其他过滤器,但到目前为止没有任何效果。StackOverflow 上已经有两个问题与我的基本相同,都没有实际答案:

在 Linux 上的 QFileDialog 中过滤可执行文件

使用 QFileDialog 在 Ubuntu 上仅显示目录和可执行文件

有人知道怎么做吗?还是 QFileDialog 根本做不到?它可以完全完成还是识别可执行文件通常不是那么简单?

(注意:我使用 Qt 4.8.5,因为我使用与 Qt 5 不兼容的第三方代码,如果这很重要的话。)

(注意:没有将其标记为 C++,因为它也与 Python 相关。)

标签: linuxqtqt4

解决方案


如果您使用本机文件对话框,则某些设置无效。

这应该有效:

   QFileDialog dlg(this, tr("Select executable"));
   dlg.setOption(QFileDialog::DontUseNativeDialog, true);
   dlg.setFilter(QDir::Executable | QDir::Files);

请注意,这将归档可执行文件。同时显示文件夹没有已知的解决方案。


推荐阅读