2014-03-31 2 views
0

프로그램을 시작할 때 filedialog는 특정 디렉토리에 있습니다. 그런 다음 다른 디렉토리로 이동하고 일부 파일을 선택합니다. 일단 파일을 선택하면 파일이 선택된 현재 디렉토리를 얻으려고합니다. 하지만 그것은 현재 디렉토리를 반환하지 않습니다, 그것은 나에게 filedialog 처음에 프로그램이 시작되었을 때 원래 디렉토리를 반환합니다. 코드 스 니펫은 다음과 같습니다.QFileDiaglog 메서드 디렉터리에 현재 디렉터리가 표시되지 않는 이유는 무엇입니까?

QFileDialog * fileDialog = new QFileDialog(this); 
fileDialog->setFileMode(QFileDialog::ExistingFiles); 
QListView* list = fileDialog->findChild<QListView*>("listView"); 
if(list) 
{ 
    list->setSelectionMode(QAbstractItemView::MultiSelection); 
} 
QTreeView* tree = fileDialog->findChild<QTreeView*>(); 
if(tree) 
{ 
    tree->setSelectionMode(QAbstractItemView::MultiSelection); 
} 
if(fileDialog->exec()) 
{ 
    if(fileDialog->selectedFiles().size()>0) 
    { 
     QDir dir = fileDialog->directory(); 
     fileDialog->update(); 
     qDebug()<<dir.absolutePath(); 
    } 
} 

내가하는 실수는 무엇이라고 생각하십니까? filedialog가 현재 존재하는 디렉토리의 절대 경로를 어떻게 얻을 수 있습니까?

+0

[한 호출 정적 메서드가 아닌] 복잡한 접근법을 사용하는 이유가 있습니까? (http://qt-project.org/doc/qt-5/qfiledialog.html#getOpenFileNames) – Bowdzone

+0

왜 그렇습니까? 여러 파일을 선택하기 위해 파일 대화 상자의 내부 구현을 망쳐야한다고 생각하십니까? 이 코드는 혐오스럽지 않습니까? 파일 다이얼로그에는 내부적으로 Qt 구현이 없다는 것에 신경 쓰지 마라. 아마 윈도우즈 나 OS X 어느쪽에도 명목상의 시스템이 아닌 시스템에서 실행 중일 것이다. 'setFileMode (QFileDialog :: ExistingFiles)'로 충분하다. 왜 다른 해킹이 필요한가요? –

+0

왜 그 디렉토리에 관심이 있습니까? 반환 된 파일이 절대 경로 또는'directory()'와 관련하여 상대 경로를 갖는 한, 당신은 괜찮습니다. 실제로 정확한 디렉토리를 신경 쓸 필요가 없습니다. –

답변

1

QFileDialog에는 선택한 파일과 현재 디렉토리 getExistingDirectory, getOpenFileName, getOpenFileNames, getSaveFileName을 반환하는 몇 가지 정적 메서드가 있습니다. 이 정적 함수 중 하나를 사용할 수 있습니다. 또 다른 옵션은 QFileDialog를 서브 클래스 화하고 exec 메소드를 대체하여 현재 디렉토리를 리턴하는 것입니다. http://qt-project.org/doc/qt-4.8/qfiledialog.html

0

다른 제안과 같은 정적 메서드로 바꿀 수 있지만 먼저 메모리 누수 문제를 해결해야한다고 생각합니다!

언제든지 동일한 디렉토리를 얻는 이유는 새로운 QFileDialog을 작성한다는 것입니다. 이 대화 상자는 한 번만 사용하며 this 개체 (주로 주 창)를 사용하는 경우 삭제됩니다.

정적 버전을 사용하거나 기본 창 클래스에서 필드를 만들고 하나의 대화 상자 만 만들고 필요할 때 다시 사용하십시오.

관련 문제