728x90

실행환경 : windows10

 

QFileDialog는 디렉토리 또는 파일을 선택하는 GUI 인터페이스를 제공해줍니다. 

 

먼저 디렉토리를 선택하는 방법입니다. 버튼을 클릭하면 디렉토리를 선택하는 창을 띄우겠습니다.

 

getExistingDirectory의 2번째 인자는 선택 창의 제목을 설정해주고, 3번째 인자는 처음에 선택 창이 떴을 때의 경로를 설정해 줍니다. QDir::currentPath()로 설정을 하게되면 프로젝트가 설정되어 있는 폴더가 열리게 되고 다른 경로를 원하면 절대경로를 넣어 줄 수 있습니다. 4번째 인자는 옵션을 주게 되는데 옵션은 다음과 같습니다. 

  • ShowsDirsOnly : 디렉토리들만 표시
  • DontResolveSymlinks : 심볼릭 링크를 표시하지 않기 위해 사용
  • DontConfirmOverwrite : 덮어쓰기 시 경고 창을 표시하지 않기
  • DontUseNativeDialog : 시스템의 기본 Dialog를 사용하지 않기
  • ReadOnly : 읽기 모드로 파일 Dialog 사용
  • HideNameFilterDetails : 필터를 이용해 파일을 감추기 위해 사용

옵션을 주지 않으면 기본으로 ShowsDirsOnly로 설정되어 있습니다.

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    QString dir = QFileDialog::getExistingDirectory(this,
    						   "파일 선택",
                                               	    QDir::currentPath(),
                                                    QFileDialog::ShowDirsOnly);
	
    qDebug() << dir;
}

실행하면 아래처럼 버튼이 하나 있는 창이 나오게 됩니다. 

이 버튼을 클릭하면 디렉토리를 선택할 수 있는 창이 뜨게 됩니다. 

폴더를 선택 하게 되면 QString 형태로 경로를 받아오게 됩니다.

다음은 파일을 선택하는 방법입니다.

 

getOpenFileName은 2,3번째 매개변수는 동일하고 마지막 매개변수는 선택하고자 하는 파일의 형식을 지정합니다. 모든 형식의 파일을 선택하고 싶을때는 Files (*.*), txt 파일만을 선택하고 싶을 때는 Files (*.txt)로 적어줍니다.

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    QString file = QFileDialog::getOpenFileName(this,"파일 선택","C:\\","Files (*.*)");
    qDebug() << file;
}

Files (*.*) 실행결과
Files (*.txt) 실행결과

디렉토리와 마찬가지로 선택한 파일의 경로를 QString 형태로 반환합니다.

함수명을 getOpenFileNames로 하게 되면 여러 파일을 중복 선택할 수 있습니다. 이때는 QStringList 형식으로 반환을 해줍니다.

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    QStringList file = QFileDialog::getOpenFileNames(this,"파일 여러개 선택","C:\\","Files (*.*)");
    qDebug() << file;
}

 

이 파일 정보에서 파일 이름만 뽑아내고 싶을 때는 QFileInfo를 사용합니다.

QString FileInfo = QFileDialog::getOpenFileName(this, "OS 파일 선택", QDir::currentPath(), "TXT (*.txt)");
if(FileInfo != NULL)
{
    QFileInfo info(FileInfo);		
    qDebug() << info.fileName();		// test.txt
    qDebug() << info.baseName();		// test
}
728x90

+ Recent posts