2017-05-08 13 views
1

나는 이것을 며칠 동안 알아 내려고 노력했지만 아직 이해하지 못했다. 기본적으로 파일을 선택하려면 QFileDialog 사용하고 있지만 파일을 선택하지 않고 창을 닫을 경우 프로그램이 충돌합니다. 선택한 파일이 없는지 어떻게 알 수 있습니까?파일을 선택하지 않고 QFileDialog가 닫혔다는 것을 어떻게 알 수 있습니까?

QFileDialog loadFile(this); 
loadFile.setFileMode(QFileDialog::AnyFile); 


QString filename = ""; 


loadFile.exec(); 

이 내가 선택한 파일을 얻기 위해 사용하는 코드는 다음과 같습니다 여기 내가 사용하고있는 코드입니다.

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 파일을 선택하지 않고 선택을 수락하면 선택이 누락 된 것과 관계없이 '수락 됨'상태가 트리거됩니다. – rbaleksandar

답변

1

은 무엇 당신이해야 할 것은 ... 좋아는 다음) (임원의 반환 값을 확인입니다

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