2016-04-17 96 views
2

我想在Ubuntu上創建一個QFileDialog,這將允許用戶選擇一個可執行文件,意圖是該文件是一個桌面應用程序(即類似於.exe在Windows上的可執行文件的子集)。只顯示在Ubuntu上使用QFileDialog的目錄和可執行文件

在Windows中,這是使用setNameFilter尋找"(*.exe)"文件實現,但對於Ubuntu顯然不使用擴展名的可執行文件,你需要使用QDir::Filters方法。

你會認爲下面會做的伎倆

QFileDialog dialog; 
dialog.setFilter(QDir::AllDirs | QDir::Executable); 
// ... 
dialog.exec(); 

,但它實際上有過濾掉文件系統項的99%,幾乎包括了所有的目錄,因此無法導航的作用。

這似乎是QFileDialog::setFilter功能應用於所有的過濾器和權限,以每個文件目錄,它看起來在,這個問題在於目錄和可執行程序(幾乎)相互排斥的,我想不通在Ubuntu上有什麼合適的組合可以實現「任何目錄,或只有那些可以作爲程序執行的文件」。

我已經試過另外大多數排列AllDirsDirsExecutableAllEntries,等等,所以我不認爲這是爲一個丟失的屬性一樣簡單。

一些其他排列我已經試過:

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 :: Executeable

我寫了一個備份程序與基於一個QDir搜索算法(遞歸),並且從未在Linux或Windows中遇到過問題。也許它對你有用。

只要把你想翻閱的,包括和路徑;)

有一個愉快的一天

+0

我並不想從目錄獲得'entryList',我試圖過濾一個'QFileDialog'。這不是同一個問題。沒有指定的目錄,因爲它需要來自對話框中的用戶輸入,但如果所有目錄都被過濾出對話框,則用戶無法導航到所述目錄。如果我將問題中顯示的權限設置爲返回目錄的位置,則用戶可以選擇任何文件,即使是非程序,在我的情況下這些程序都是無效輸入。 –

+0

嗯,我可能會想出一些東西。 –

相關問題