2016-07-04 2 views
0

Qt 5 및 QFileDialog를 사용하고 있습니다. 파일 이름에 슬래시 (/)를 사용하도록 사용자를 제한하려고합니다.QFileDialog : 파일 이름 얻기

파일 이름을 저장하는 QFileDialog 코드는 다음과 같습니다. 사용자가 다음 "다운로드"폴더에 파일 이름 "abc.csv"를 제공하는 경우

QFileDialog saveAsdialog(this); 
QString filename = saveAsdialog.getSaveFileName(this, tr("Save 
file"), ".", tr("Files (*.csv)")); 

대화에서 "getSaveFileName은"올바른 "/home/user/Downloads/abc.csv"를 반환합니다.

하지만 내 질문은 사용자가 파일 이름 (/)에 슬래시를 넣으면 제대로 작동하지 않는다는 것입니다.

사용자가 파일 이름을 "abc/xyz.csv"로 지정하려면 올바른 파일 이름을 가져 오지 못합니다.

사용자가 "확인"을 클릭하면 올바른 파일 이름 "abc/xyz.csv"를 얻는 방법은 무엇입니까?

+0

이 경우 무엇을 얻는 지 자세히 설명해 주실 수 있습니까? 그리고 귀하의 기대는 무엇입니까? – majk

+0

내 기대는 사용자가 대화 상자에서 "abc/xyz.csv"라는 파일 이름을 지정할 때 사용자가 확인 버튼을 눌러 대화 상자를 닫을 때 파일 이름을 추출하려고합니다. 나는 "/home/user/Downloads/abc/xyz.csv"와 같은 전체 경로를 얻고 있습니다. 이 경로에서 나는 사용자가 지정한 파일 이름을 찾을 수 없습니다. 사용자가 대화 상자를 닫으면 대화 상자에서 사용자가 지정한 정확한 파일 이름을 어떻게 얻어야합니까? – Neel

+0

@ Neeel 적어도 QFileDialog를 파생시키고 필요한 수표로'accept' 메서드를 다시 구현할 수 있습니다. – ilotXXI

답변

2

이 시계는 wikipedia link입니다.

보시다시피, 파일 이름에는 /자를 사용할 수 없습니다. 따라서 파일 이름은 abc/xyz.csv입니다.

또한 파일 대화 상자에서 항상 현재 디렉토리인지 확인할 수 있으며이 정보를 기반으로 선택한 파일 이름을 추적 할 수 있습니다. 시도해보십시오.

QFileDialog saveAsdialog(this); 
QString curDir(QDir('.').absolutePath()); 
connect(&saveAsdialog, &QFileDialog::directoryEntered, [&curDir](const QString& dir) { 
    curDir = dir; 
}); 
// We cann't use static member getSaveFileName 
//QString filename = saveAsdialog.getSaveFileName(this, tr("Save file"), ".", tr("Files (*.csv)")); 
//here manual saveAsdialog setup 
........... 
if (saveAsdialog.exec() == QDialog::Accepted) { 

    QString filename = saveAsdialog.selectedFiles().first(); //add check that list is not empty!!! 
    QString f = filename.replace(curDir, ""); 
} 
+0

다른 대화 상자에서 사용자는 파일 이름에'/'를 입력 할 수도 있고 입력하지 않을 수도 있습니다. 기본 Windows 대화 상자에서 기본 창이 없습니다. Qt 대화창은 그것을 허용하고'abc/xyz.csv'를 현재 디렉토리의'abc' 서브 디렉토리에있는 파일'xyz.csv'로 취급합니다. 그러나'abc'의 존재를 확인하지는 않습니다. ** P.S. ** : 큰 문제임을 확신하지 못합니다. 파일을 열 수 없으면 오류가 표시됩니다. – ilotXXI

+0

당신 말이 맞아요. 그냥 당신을 위해 정보 오류 오프닝 파일은 리눅스에서만 나오지만 Mac OS에서는 "/"가 파일 이름에서 ":"로 변환됩니다. Mac 파일 이름에서 abc/xyz.csv는 Qt abc : xyz.csv로 변환됩니다. 그것은 하나의 해결책 일 수 있지만 사용자가 대화 상자를 닫을 때 대화 상자에서만 파일 이름을 추출 할 수있는 방법이 있습니까? 예 : 사용자가 파일 이름을 "abc/xyz.csv"로 지정하고 "/ home/user/Downloads"폴더에 저장하면 "/home/user/Downloads/abc/xyz.csv"와 같은 전체 경로를 얻게됩니다. 사용자가 대화 상자를 닫은 후 대화 상자에서 정확한 파일 이름을 찾을 수 없습니다. – Neel

+0

@Evgeny. 의견을 주셔서 감사합니다. 귀하의 패치를 시도했지만 저장 파일의 대화 상자에서 파일을 열지 않습니다. 파일 저장 대화 상자에서 사용자는 파일 이름을 입력합니다. 귀하의 솔루션을 시도했지만 기존 폴더에서 열려있는 파일을 요구하고 있습니다. – Neel