2011-01-24 9 views
0

내가 사용하고있는 스 니펫은 다음과 같이 보입니다.QFiledialog가 잘못된 디렉토리를 반환합니다.

QDir lastDir; 
QFileDialog dial(this); 

dial.getOpenFileName(this, 
        tr("Open File"), 
        QString("/home"), 
        tr("Raw Images (*.nef *.NEF *.dng *.DNG)")); 

lastDir = dial.directory(); 
qDebug() << lastDir; 

출력은 어떤 디렉토리에 있더라도 완전히 잘못되었습니다. 그러나 잘못된 디렉토리는 항상 동일합니다.

AFAICT 나는 여기서 아무 잘못도 없다. 여기서 무슨 일이 일어나고있는거야? 건배

+0

음, 가까운 문서를 읽었어야합니다. "대화 상자에 현재 표시된 디렉토리를 반환합니다." 이상하게도 내가 본 적이없는 디렉토리를 반환합니다. – regomodo

답변

3

getOpenFileName()은 정적으로 "파일 선택기"대화 상자를 열고 사용자가 대화 상자를 끝내면 "사용자가 선택한 기존 파일"을 반환합니다. 당신은 (::의 사용을 기록하고 클래스 이름 QFileDialog 대신 개체 이름)과 같이 사용 :

QString fileName = QFileDialog::getOpenFileName(this, 
       tr("Open File"), 
       QString("/home"), 
       tr("Raw Images (*.nef *.NEF *.dng *.DNG)")); 

directory()는 "현재 대화 상자에 표시되는 디렉토리"비 정적이며 돌아갑니다. 이 함수는 대화 상자가 아직 열려있는 동안 호출되도록 만들어졌으며, 정적 호출에서 다루지 않는 사용 사례를위한 것입니다.


당신이 개체를 인스턴스화 (상태에 영향을 미치지 않습니다있는) 거기에 정적 함수를 호출하고, 단지 객체의 원래 상태를 반영합니다 directory()을 불렀다 여기에 무슨 일이 일어나고있는 아마도 작업 디렉토리 일 것입니다. 대신 위의 그림과 같이 getOpenFileName() 호출의 반환 값을 변수에 저장해야합니다.

사용자가 디렉토리를 선택하도록 요청하려면 getExistingDirectory()을 대신 사용해보십시오. 또는 파일 이름에서 디렉토리를 추출하려는 경우 QDir 클래스에는이 기능에 유용한 몇 가지 기능이 있습니다.

+0

감사합니다. 문서를 조금 더 읽은 후에 오류가 발생했습니다. 내가 한 것은 qdir/qstring 대화 상자의 디렉토리입니다. 결국에는 _getOpenFileName_에서 반환 된 QString을 사용하고 파일 이름을 잘라 냈습니다. 그런 식으로 다음 번에 내가 filedialog를 열면 내가 본 마지막 폴더에서 돌아온다. 이상하게도 _directory_의 디렉토리는 "/ media/data/Projects/python/Gereqi/icons"였습니다. 실제로 작업 디렉토리는 "/ media/data/Projects/C++/rawviewer /"였습니다. 기묘한. – regomodo