Я пытаюсь создать 0bна Ubuntu, который позволит пользователю выбрать исполняемый файл с намерением, чтобы файл был настольным приложением (то есть, аналогично .exe подмножество исполняемых файлов в Windows).Показывать только каталоги и исполняемые файлы на Ubuntu с использованием QFileDialog
В Windows, это достигается с помощью setNameFilter
искать "(*.exe)"
файлы, но так как Ubuntu явно не использует расширения для исполняемых файлов, вам нужно использовать метод QDir::Filters
.
Можно подумать, что следующий будет делать трюк
QFileDialog dialog;
dialog.setFilter(QDir::AllDirs | QDir::Executable);
// ...
dialog.exec();
, но это на самом деле имеет эффект фильтрации 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
С результатами:
- все отфильтровывается
- все отфильтровывается не
- ничего отфильтровывается
Есть a related question относительно PyQt, на который никогда не отвечали, а также я не уверен, что OP этого вопроса хотел, чтобы каталоги были видимыми.
Я не хочу, чтобы получить 'entryList' из каталога, я пытаясь отфильтровать 'QFileDialog'. Это не та же проблема. Нет указанного каталога, поскольку он должен поступать от пользовательского ввода в диалоговом окне, но пользователь не может перейти к указанному каталогу, если все каталоги отфильтровываются из диалогового окна.И если я установить разрешение, как я показал в этом вопросе, до точки, где я получаю каталоги обратно, пользователь может выбрать любой файл, даже не-программу, которые в моем случае являются недействительными входами. –
Хм, я мог бы что-нибудь придумать. –