Nic*_*aus 5 c++ ubuntu qt file-permissions qfiledialog
我正在尝试QFileDialog在 Ubuntu上创建一个允许用户选择可执行文件的文件,目的是使该文件是桌面应用程序(即类似于Windows 上的.exe可执行文件子集)。
在 Windows 上,这是通过setNameFilter查找"(*.exe)"文件来实现的,但由于 Ubuntu 显然不为可执行文件使用扩展名,因此您需要使用该QDir::Filters方法。
您会认为以下内容可以解决问题
QFileDialog dialog;
dialog.setFilter(QDir::AllDirs | QDir::Executable);
// ...
dialog.exec();
Run Code Online (Sandbox Code Playgroud)
但它实际上具有过滤掉 99% 的文件系统条目的效果,包括几乎每个目录,使其无法导航。
似乎该QFileDialog::setFilter函数将所有过滤器和权限应用于它所查看的每个文件和目录,问题在于目录和可执行程序(几乎)是相互排斥的,我无法在 Ubuntu 上弄清楚什么是正确的组合是实现“任何目录,或仅那些可以作为程序执行的文件”。
我还尝试了AllDirs, Dirs, Executable,AllEntries等的大多数排列,所以我认为这不像缺少一个属性那么简单。
我尝试过的其他一些排列:
dialog.setFilter(QDir::AllDirs | QDir::Executable | QDir::Files); // 1
dialog.setFilter(QDir::AllDirs | QDir::Executable | QDir::Files |
QDir::Readable); // 2
dialog.setFilter(QDir::AllDirs | QDir::Executable | QDir::Files |
QDir::Readable | QDir::Writeable); // 3
Run Code Online (Sandbox Code Playgroud)
结果:
小智 -2
我使用 QDir。在 Linux 下工作得很好,下面是一个例子:
QDir dir = QDir("Path");
QStringList data = dir.entryList(QDir::Executeable | QDir::Files | QDir::NoDotAndDotDot);
// This line should return a QStringList with names of files in
//your specified directory. It will get every executeable that is a file
Run Code Online (Sandbox Code Playgroud)
如果它没有得到你想要的,只需删除 QDir::Executeable
我已经用基于 QDir 的搜索算法(递归)编写了一个备份程序,并且在 Linux 或 Windows 中从未遇到过问题。也许它对你有用。
只需输入您想要查看的路径,并包括 , 和 ;)
祝你今天过得愉快
| 归档时间: |
|
| 查看次数: |
333 次 |
| 最近记录: |