2017-05-08 43 views
1

我一直試圖弄清楚這幾天,還沒有弄清楚。基本上我正在使用QFileDialog來選擇一個文件,但如果我關閉窗口與出選擇文件程序崩潰。我如何判斷是否沒有選中文件?這裏是我使用的代碼:如何判斷QFileDialog是否在未選擇文件的情況下關閉?

這是我用來獲取所選文件的代碼。

selectedFiles = loadFile.selectedFiles(); 

filename = selectedFiles.at(0); 

我嘗試使用 {如果(dialog.selectedFiles.at(0)!=「」} ,看看有沒有選擇的文件,但它不能正常工作。如果我選​​擇一個文件就會運行if語句就好代碼。

由於一噸或任何幫助!

+0

'exec'函數返回[DialogCode](http://doc.qt.io/qt-4.8/qdialog.html#DialogCode-enum)。 –

+1

在嘗試獲取第一個元素之前,您應該檢查selectedFiles是否爲空(例如'if(!selectedFiles.isEmpty())')。 –

+0

@CodyGray我幾乎可以肯定的是,不選擇文件,但接受選擇將觸發'Accepted'狀態,而不管缺少選擇。 – rbaleksandar

回答

1

你需要做的是檢查的exec的返回值()喜歡如下...

if(!loadFile.exec()) 
{ 
    // The user pressed the cancel button so handle this accordingly 
} 
else 
{ 
    // At least one file was selected because the user cannot click the 'open' button unless a file selection has been made so continue as normal 
} 
3

如果關閉對話框而沒有選擇文件,則列表selectedFiles爲空,如果嘗試訪問某個元素,則會發生崩潰(該功能對於無效索引不安全)。

你想要的是檢查用戶是否選擇了任何東西。

QString filename; 

QFileDialog loadFile(this); 
loadFile.setFileMode(QFileDialog::AnyFile); 
loadFile.exec(); // You could check the return value here to see if the user canceled or not 
QStringList selectedFiles = loadFile.selectedFiles(); 

if (!selectedFiles.isEmpty()) 
{ 
    filename = selectedFiles.at(0); 
    // Do something with the filePath... 
} 
相關問題