我在使用 C 和 Qt(在 Windows 10 上)的應用程式中有一個用例。該應用程式使用 7zip.exe 作為子行程來解壓縮選定檔案夾中的檔案。我需要使用 QFileDialog 選擇一個檔案夾,并自動選擇所有擴展名為 .zip 和 .7z 的檔案,然后使用 QProcess 解壓縮它們并將它們顯示在輸出中。我想出了這個代碼片段。用于選擇帶有選定檔案夾的檔案。
void MainWindow::on_browseButton_clicked()
{
QFileDialog d(this);
d.setFileMode(QFileDialog::Directory);
d.setNameFilter("*.zip");
if (d.exec())
qDebug () << d.selectedFiles();
}
但這段代碼沒有運行,它只顯示檔案夾名稱,沒有選擇任何檔案。誰能建議我在哪里做錯了。

uj5u.com熱心網友回復:
它只顯示檔案夾名稱,而不是未選擇任何檔案。
這就是它應該回傳的東西。你要求它顯示一個對話框來選擇一個檔案夾,所以你可以選擇。 selectedFiles()根據檔案,將回傳所選檔案夾的路徑:
https://doc.qt.io/qt-5/qfiledialog.html#FileMode-enum
持續的 價值 描述 QFileDialog::目錄 2 目錄的名稱。顯示檔案和目錄。但是,本機 Windows 檔案對話框不支持在目錄選擇器中顯示檔案。
https://doc.qt.io/qt-5/qfiledialog.html#selectedFiles
回傳包含對話框中選定檔案的絕對路徑的字串串列。如果沒有選擇檔案,或者模式不是
ExistingFiles或ExistingFile,則selectedFiles()包含視口中的當前路徑。
對話框關閉并回傳后exec(),您需要自己迭代該檔案夾以發現.zip其中的.7z檔案。
處理對話框的一種更簡單的方法是使用QFileDialog::getExistingDirectory()。您可以QDir從選定的檔案夾中構造一個,然后使用該QDir::entryList()方法在該檔案夾中搜索 zip 檔案。
請參閱如何從選定目錄中讀取所有檔案并一一使用它們?.
例如:
void MainWindow::on_browseButton_clicked()
{
QDir directory = QFileDialog::getExistingDirectory(this);
QStringList zipFiles = directory.entryList(QStringList() << "*.zip" << "*.7z", QDir::Files);
foreach(QString filename, zipFiles) {
// do whatever you need to do
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/466405.html
