2017-05-08 6 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... 
} 
関連する問題