[Qt, C++] 폴더 선택하여 폴더 경로 얻기(getExistingDirectory)

목적

Qt Creator를 활용, 사용자가 폴더 오픈 버튼을 클릭하여 폴더를 선택하면 선택된 폴더 경로를 수집

테스트 환경

Windows 10 / C++ / Qt 5.15.2 / Qt Creator 4.13.3

버튼 생성

프로젝트 생성

Qt Creator를 실행하고 프로젝트를 생성한다.

mainwindow.ui

버튼을 생성하기 위해 ui를 수정한다. 

프로젝트 생성 시 별도로 수정했다면 아래 파일 이름은 다를 수 있다.

mainwindow.ui를 더블클릭한다.

mainwindow.ui에서 Push Button을 ui로 드래그한다.

생성된 버튼을 더블클릭하여 보여지는 텍스트를 변경할 수 있으며, Object의 pushButton을 수정하여 소스코드의 객체 이름을 수정할 수 있다. 각각 open으로 수정한다.

버튼을 클릭했을 때 특정 함수가 실행되게 할 수 있다.
버튼을 우클릭한 후 Go to slot을 선택한다.

clicked()를 선택한 후 OK를 클릭한다.

mainwindow.cpp에 on_open_clicked()함수가 생성된다. 이제 open 버튼을 클릭하면 이 함수가 실행된다.

이 함수에 폴더를 여는 코드를 입력하여야 한다.

폴더 선택

mainwindow.cpp

폴더를 선택하는 함수는 QFileDialog 클래스를 사용한다. 최상단에 이 클래스를 포함한다.

#include <QFileDialog> // 입력

만들어진 on_open_clicked() 함수 내에 폴더를 선택하는 함수인 getExistingDirectory를 사용한다.\

QFileDialog::getExistingDirectory(부모객체, 창 이름, 시작 위치, 옵션)
void MainWindow::on_open_clicked()
{
    QFileDialog::getExistingDirectory(this, "Search Folder", QDir::homePath(),QFileDialog::ShowDirsOnly);
}

시작 위치는 “c:/”과 같이 경로를 직접입력할 수 있다.

옵션이 현재 QfileDialog::ShowDirsOnly가 포함되어 있는데, 이는 Qt에서 권장하고 있다. 이 옵션을 제거했을 때 달라지는 점이 무엇인지는 모르겠다.

Run을 한 후 open 버튼을 클릭하면 파일 선택 창이 뜬다.

선택된 폴더 경로 얻기

getExistingDirectory() 함수의 리턴값은 선택된 폴더의 경로다.

폴더의 경로를 qDebug()로 출력한다.

void MainWindow::on_open_clicked()
{
    QString searchLocation = QFileDialog::getExistingDirectory(this, "Search Folder", QDir::homePath(),QFileDialog::ShowDirsOnly);
    qDebug() << searchLocation;
}

참고

https://doc.qt.io/qt-5/qfiledialog.html#getExistingDirectory

Leave a Comment