2016-04-17 1 views
2

Я пытаюсь создать 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 

С результатами:

  1. все отфильтровывается
  2. все отфильтровывается не
  3. ничего отфильтровывается

Есть a related question относительно PyQt, на который никогда не отвечали, а также я не уверен, что OP этого вопроса хотел, чтобы каталоги были видимыми.

ответ

-1

Я использую 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 

Если это не получить, что вы хотите просто удалить QDir :: исполнимый

Я написал программу резервного копирования с помощью алгоритма поиска на основе QDir (рекурсия) и никогда не возникало проблем в Linux или Windows. Может, это сработает для вас.

Просто поместите в путь, который вы хотите просмотреть, и включают в себя, и;)

имеют хороший день

+0

Я не хочу, чтобы получить 'entryList' из каталога, я пытаясь отфильтровать 'QFileDialog'. Это не та же проблема. Нет указанного каталога, поскольку он должен поступать от пользовательского ввода в диалоговом окне, но пользователь не может перейти к указанному каталогу, если все каталоги отфильтровываются из диалогового окна.И если я установить разрешение, как я показал в этом вопросе, до точки, где я получаю каталоги обратно, пользователь может выбрать любой файл, даже не-программу, которые в моем случае являются недействительными входами. –

+0

Хм, я мог бы что-нибудь придумать. –

 Смежные вопросы

  • Нет связанных вопросов^_^