我想在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上有什麼合適的組合可以實現「任何目錄,或只有那些可以作爲程序執行的文件」。
我已經試過另外大多數排列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'。這不是同一個問題。沒有指定的目錄,因爲它需要來自對話框中的用戶輸入,但如果所有目錄都被過濾出對話框,則用戶無法導航到所述目錄。如果我將問題中顯示的權限設置爲返回目錄的位置,則用戶可以選擇任何文件,即使是非程序,在我的情況下這些程序都是無效輸入。 –
嗯,我可能會想出一些東西。 –