2015. 9. 21. 23:00

0051 - 대화 창 표시하기

참고 영상

QT 에서 사용하는 메인 윈도우와 대화창에 대해 설명하고, 메인 윈도우에서 대화창을 호출하는 메뉴 항목과 액션에 대해 알아 보겠습니다.

1. 프로젝트 생성

Choose a template

Projects : Application / Qt Widgets Application / Choose

Qt Widgets Application

Location

Name : 005_MyWindows / Next

Kits

Desktop Qt 5.5.0 MinGW 32bit (상황에 따라 다를 수 있습니다.) / Next

Details

(그대로 두고) / Next

Summary

(그대로 두고) / Finish

2. 빌드 확인

Ctrl + R 을 눌러서 빌드가 되고 창이 뜨는 것을 확인 합니다.

3. 메인 윈도우 (Main Window)

메인 윈도우는 QT 응용프로그램의 사용자 인터페이스를 제공하는 윈도우를 구성하는 프레임워크의 산물입니다. 대부분의 QT 기반 GUI 응용프로그램은 메인 윈도우를 가지고 있습니다.

아래는 Ctrl + R 을 눌렀을 때 뜨는 창의 화면이며, 메인 윈도우를 이용하여 생성되었습니다.

QT Designer 를 사용하여 폼 내용을 보면 아래와 같이 창틀이 없고 위젯을 넣기 편하게 격자로 된 화면으로 나타납니다.

4. 대화창 (다이얼로그, Dialog)

대화상자는 팝업(Pop-up, 화면에 튀어나옴) 형태로 표시되며 사용자에게 정보를 제공하거나 입력을 받는 것이 주목적입니다.

뒷 배경을 선택할 수 있는가에 따라 모달(Modal)과 모달리스(Modaless) 형태로 나뉘게 됩니다. QT Designer 에서 Help / About Qt Creator 를 선택하면 모달리스 창이 나옵니다.

Qt Creator 에 대한 정보를 그림과 글로 표시됩니다. 이 때 대화창 밖의 QT Creator 창을 클릭을 하면 응답이 오고 다른 작업을 할 수 있습니다.

반면에, Help / About Plugins 를 선택하면 모달 창이 나타나는데 이때는 창 밖의 QT Creator 클릭해서 작업을 할 수 없습니다.

5. 액션 (Action)

액션은 메뉴를 구성하는 명령문을 의미합니다. 키보드의 단축키, 메뉴의 버튼이나 툴바와 같은 사용자의 입력으로 호출될 수 있습니다. 액션은 QT Creator 의 cpp 파일 내에서 직접 만들수 있으며, 폼 편집기 내에서도 GUI 도구를 사용하여 작업할 수 있습니다.

6. 메뉴 아이템 만들기

Type Here 를 더블 클릭하면 메뉴 바 (Menu Bar) 항목을 추가할 수 있습니다. 오브젝트 인스펙터를 보시면 메인 윈도우를 구성하는 중앙 위젯 (centralWidget), 메뉴 바, 메뉴, 툴바, 상태 바 (스테이터스 바) 를 볼 수 있습니다. 해당 위젯들이 모여서 메인 윈도우의 UI 를 구성하고 있습니다.

여기서 왼쪽 상단에 Type Here 을 더블 클릭하여 File 을 입력합니다.

File 을 누른 뒤 나오는 탑 다운 메뉴 (Top-down Menu) 항목의 Type HereNew Window 를 입력합니다.

New Window 가 입력이 되자 마자, 자동으로 액션이 추가되며 액션 에디터 (Action Editor) 에 해당 항목이 추가됨을 볼 수 있습니다.

액션 아이템을 드래그 하여 툴바 (Tool Bar) 에 넣으면 (드롭) 아래와 같이 New Window 가 툴바 항목에 표시 됩니다. 

그리고 해당 액션에 대한 이벤트를 만들기 위해 시그널&슬롯 기능을 활용합니다. actionNew_Window 를 오른쪽 버튼을 눌러서 Go to Slot ... 을 선택합니다.

Go to Slot 에 triggered() Signal 을 선택하면 자동으로 on_actionNew_Window_triggered() 이라는 Slot 이 생성되며, Signal & Slot 관계가 맺어지게 됩니다.

on_actionNew_Window_triggered() 메소드에 New Window 를 눌렀을 때 나타날 항목을 지정할 수 있습니다.

아직 내용이 없으므로 Run 을 선택하면 New Window 이라는 툴 바와 File 메뉴의 메뉴 항목 (아이템) 으로 나오지만 별다른 응답은 없습니다.

7. 새 대화창 만들기

메인 윈도우 외에 다른 창 (윈도우)을 만들기 위해서는 폼 편집기에서 새로운 폼 파일을 만드는 방법으로 진행할 수 있습니다. 새로운 윈도우이므로 관련하여 이들을 지원하는 폼 클래스와 코드들이 같이 포함되어야 합니다.

Edit 창에서 프로젝트 이름인 005_MyWindows 에서 마우스 오른쪽 버튼을 누르고 Add New... 를 선택합니다.

구현 목적으로 생성하는 것이므로 Qt Designer Form Class 를 선택하고 Choose ... 를 선택합니다

단순히 대화 창만 표시할 것이므로 Dialog without Buttons 을 선택하고 Next 를 누릅니다.

폼을 지원하는 클래스 이름 (Class Name) 을 MyDialog 이라 정하면 알아서 헤더 파일과 소스 파일, 폼 파일까지 이름이 변경됩니다. 확인 하신 후 Next 를 선택합니다.

버전 관리는 하지 않으므로 <None> 으로 하시고 Add to project 에 대해, 관리되는 프로젝트는 현재 열려 있는 005_MyWindows.pro 임을 확인한 후 Finish 를 선택하여 추가 작업을 완료 합니다.

편집 (Edit) 에서 mydialog.ui 를 더블 클릭하면 폼 편집기가 열리며, 새롭게 생성된 대화창에 대한 폼 편집을 할 수 있습니다. 여기서 간단하게, Text Edit 과 Push Button 위젯을 추가합니다.

8. 새 대화 창을 열기

폼 파일만 작성한다고 자동으로 연결되지 않습니다. 메인 윈도우의 New Window 를 클릭했을 때 나오는 이벤트를 통해 아까 작성한 mydialog 가 나오게 해봅니다.

메인 윈도우에서 대화 창을 호출하는 구조이므로 mainwindow.cpp 에 대화 창을 지원하는 클래스의 헤더를 추가합니다.

#include "mydialog.h"

그리고 on_actionNew_Window_triggered() 에 다음의 문장을 추가합니다.

MyDialog mDialog;

mDialog.show();

그러면 아래의 코드가 mainwindow.cpp 에 저장이 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "mydialog.h"
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::on_actionNew_Window_triggered()
{
    MyDialog mDialog;
    mDialog.exec();
}
cs

이제 실행하면 MainWindow 에서 New Window 를 누르면 MyDialog 로 구성된 대화 창이 나타남을 확인 할 수 있습니다.

작업 파일

005_MyWindows.zip


아직 내용이 완성되지 않았습니다. 다음(0052) 에 정리 할 내용은 아래와 같습니다.

  • 모달 / 모달리스 만들기

  • 창을 표시하는 몇가지 방법

  • 창을 닫을 때 발생될 수 있는 메모리 누수 관리

  • 중앙 위젯