시작은 미미하나 끝은 쥬쥬하리라.

Programming/QT

[QT] Qt4 - 단축키로 파일 오픈하기

코딩뚜벅이 2024. 1. 18. 23:00

단축키로 파일 오픈하기

  • 단축키 구현
  • 결과

단축키 구현

Qt4에서 단축키 관련 메서드를 이용하여 특정 문서를 오픈할 수 있는 방법은 많습니다. 저는 오늘 그 중에서 두 가지 방법을 보여드리려 합니다. 첫 번째 방법은 단축키를 누르면 문서 파일이 직접적으로 오픈되는 방법입니다. 두 번째 방법은 단축키 클릭 시, 파일 브라우저를 오픈하는 방법입니다. 아래는 코드입니다.

 

#include <QDesktopServices>
#include <QUrl>
#include <QShortcut>
#include <QMessageBox>
#include <QFileDialog>
#include "mainwindow.h"
#include "ui_mainwindow.h"

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

    // F1 핫키 설정.
    QShortcut *shortcut = new QShortcut(QKeySequence(Qt::Key_F1), this);
    connect(shortcut, SIGNAL(activated()), this, SLOT(showHelp()));

    // F2 핫키 설정.
    QShortcut *shortcut2 = new QShortcut(QKeySequence(Qt::Key_F2), this);
    connect(shortcut2, SIGNAL(activated()), this, SLOT(showHelp2()));
}

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

void MainWindow::showHelp()
{
    // 메시지 박스 출력.
    QMessageBox::StandardButton qMsgBox;
    qMsgBox = QMessageBox::question(this, "Open File", "Do you want to open file?", QMessageBox::Yes | QMessageBox::No);

    // Yes를 클릭하는 경우.
    if (qMsgBox == QMessageBox::Yes) {

        // 현재 프로젝트 경로를 path로 지정.
        QString currentDir = QCoreApplication::applicationDirPath();
        QString filePath = currentDir + "/tip.txt";

        // 파일의 경로가 비어있는 경우.
        if (!filePath.isEmpty()) {
            QDesktopServices::openUrl(QUrl("file:///" + filePath, QUrl::TolerantMode));
        } else {
            QMessageBox::information(this, "Error", "File path is empty!");
        }
    }
}

void MainWindow::showHelp2()
{
    // 메시지 박스 출력.
    QMessageBox::StandardButton qMsgBox;
    qMsgBox = QMessageBox::question(this, "Open File", "Do you want to open file?", QMessageBox::Yes | QMessageBox::No);

    // Yes를 클릭하는 경우.
    if (qMsgBox == QMessageBox::Yes) {
        // 파일 브라우저 열기 및 파일 브라우저 창 Windows 타이틀 설정, 표시 가능한 파일 항목 설정.
        QFileDialog::getOpenFileName(this, "Open File", QDir::homePath(), "Text Files (*.txt);;All Files (*)");

    }
}

 

1. MainWindow의 생성자에서 ShortCut(단축키)를 선언해주었습니다. 이후, QT에서 이벤트를 처리하는 대표적인 방식인 SIGNAL-SLOT을 사용하여 이벤트의 처리를 해주었습니다. 단축키는 각각 F1과 F2로 설정해주었습니다. 이제 F1을 클릭하면 showHelp() 함수가, F2를 클릭하면 showHelp2() 함수가 동작합니다.

 

2. showHelp() 함수에서는 앞서 말씀드린 첫 번째 방법인 직접 문서 파일을 오픈하는 방법에 대한 구현입니다. 먼저 QMessageBox를 표시하여 Yes 버튼을 클릭하는 경우 파일이 열리도록 구현하였습니다. 문서 파일을 현재 프로젝트 경로에 넣어놓았기 때문에 현재 경로 + 문서 이름으로 path를 구성하였고 openUrl() 메서드를 이용하여 해당 경로의 파일을 오픈하도록 구현하였습니다.

 

3. showHelp2() 함수는 앞서 말씀드린 두 번째 방법인 파일 브라우저를 오픈하는 방법에 대한 구현입니다. 마찬가지로 메시지 박스를 출력하고 Yes를 클릭하면 getOpenFileName() 메서드를 통해 파일 브라우저를 오픈할 수 있게 했습니다. 인자로 파일 브라우저의 Window 타이틀, 파일 브라우저 오픈 시의 최초 경로, 표시할 파일의 확장자를 설정할 수 있습니다.

 

 


 

결과

아래 MainWindow에서 단축키를 클릭하면 구현된 slot 함수가 호출됩니다.

 

 

 

F1와 F2 단축키를 클릭했을 경우입니다. 메시지 박스가 표시됩니다.

 

 

 

F1을 클릭하고 위 메시지 박스에서 확인을 클릭하는 경우 파일이 직접적으로 오픈됩니다.

 

 

 

 

F2의 경우 아래와 같이 파일 브라우저가 오픈되고 설정한 파일의 확장자만 목록에 표시됩니다.