2017-05-08 3 views
1

Ich habe versucht, dies für ein paar Tage herauszufinden und habe es noch nicht herausgefunden. Grundsätzlich verwende ich einen QFileDialog, um eine Datei auszuwählen, aber wenn ich das Fenster ohne Auswahl einer Datei schließe, stürzt das Programm ab. Wie kann ich feststellen, ob keine Datei ausgewählt wurde? Hier ist der Code, den ich benutze:Wie kann ich feststellen, ob ein QFileDialog geschlossen wurde, ohne eine Datei auszuwählen?

Dies ist der Code, den ich verwende, um die ausgewählte Datei zu erhalten.

selectedFiles = loadFile.selectedFiles(); 

filename = selectedFiles.at(0); 

ich versuchte, mit {if (dialog.selectedFiles.at (0)! = „“} , um zu sehen, wenn es keine ausgewählten Datei ist, aber es funktioniert nicht. Wenn ich eine Datei auswählen, wird es laufen der Code in der if-Anweisung nur in Ordnung.

Dank einer Tonne oder jede Hilfe!

+0

Die Funktion 'exec' gibt einen [DialogCode] (http://doc.qt.io/qt-4.8/qdialog.html#DialogCode-enum) zurück. –

+1

Sie sollten prüfen, ob selectedFiles leer ist (z. B. 'if (! SelectedFiles.isEmpty())') bevor Sie überhaupt versuchen, das erste Element zu erhalten. –

+0

@CodyGray Ich bin mir fast sicher, dass das Auswählen einer Datei und das Akzeptieren der Auswahl den Status 'Akzeptiert' unabhängig von der fehlenden Auswahl auslöst. – rbaleksandar

Antwort

1

Was müssen Sie tun, ist der Rückgabewert von exec überprüfen() wie folgt ...

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

Wenn Sie den Dialog schließen, ohne eine Datei auszuwählen, ist Ihre Liste selectedFiles leer und wenn Sie versuchen, auf ein Element zuzugreifen, erhalten Sie einen Absturz (die Funktion ist nicht sicher für ungültigen Index).

Sie möchten überprüfen, ob der Benutzer etwas ausgewählt hat oder nicht.

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... 
} 
Verwandte Themen