사용자 입력 처리로 첫 번째 Qt 프로그램 확장하기

by gg582 · 2026-07-01 06:33:56 · 29 views

목차

사용자 입력 처리로 첫 번째 Qt 프로그램 확장하기

지난 강의에서는 첫 번째 Qt 6 애플리케이션을 만들어 보면서 QApplication을 이용해 GUI 프로그램이 어떻게 시작되는지 살펴보았습니다. 화면에는 버튼 하나를 표시했지만, 아직은 사용자의 입력에 아무런 반응을 하지 않는 상태였습니다.

이번 강의에서는 여기에 **이벤트 처리(Event Handling)**를 추가해 보겠습니다. 버튼을 클릭하면 팝업 메시지가 나타나는 간단한 프로그램을 만들면서, Qt가 사용자 입력을 처리하는 기본적인 방식을 이해해 보겠습니다.


1. 이벤트 기반 프로그래밍 이해하기

일반적인 콘솔 프로그램은 위에서 아래로 코드를 순서대로 실행한 뒤 종료됩니다.

반면 GUI 프로그램은 조금 다르게 동작합니다. 프로그램이 실행된 이후 대부분의 시간은 사용자의 입력을 기다리는 데 사용됩니다.

마우스 클릭, 키보드 입력, 창 크기 변경과 같은 모든 동작은 **이벤트(Event)**로 처리됩니다. Qt는 이벤트 루프를 통해 이러한 이벤트를 계속 감시하고, 적절한 객체에게 전달합니다.

이번 예제에서는 버튼이 클릭되었을 때 이벤트를 감지하고, 팝업 메시지를 표시하는 기능을 구현해 보겠습니다.


2. 첫 번째 프로그램 확장하기

지난 강의에서는 화면에 버튼 하나를 출력했습니다.

이번에는 여기에 사용자 입력을 연결하여 버튼을 클릭하면 실제 동작이 수행되도록 만들어 보겠습니다.

소스 코드: main.cpp

#include <QApplication>
#include <QPushButton>
#include <QMessageBox>

int main(int argc, char **argv) {

    // Initialize the Qt application infrastructure.
    QApplication app(argc, argv);

    // Create a push button.
    QPushButton button("Hello, Popup!");

    // Set the initial button size.
    button.resize(300, 100);

    // Connect the button click event to a callback.
    QObject::connect(
        &button,
        &QPushButton::clicked,
        [&button]() {
            QMessageBox::information(
                &button,
                "Qt 6",
                "Hello, Popup!"
            );
        }
    );

    // Display the button.
    button.show();

    // Enter the event loop.
    return app.exec();

}

이번 예제에서는 버튼을 클릭했을 때 실행될 콜백 함수를 QObject::connect()를 이용해 연결했습니다.

버튼이 클릭되면 Qt는 자동으로 연결된 콜백을 실행하고, 그 안에서 QMessageBox를 이용해 팝업 창을 표시합니다.


새롭게 추가된 구성 요소

#include <QMessageBox>

QMessageBox는 Qt에서 제공하는 표준 대화상자를 사용하기 위한 헤더입니다.

알림창, 경고창, 질문 창, 오류 메시지 등 대부분의 기본 대화상자는 이 클래스를 통해 표시합니다.

QObject::connect(...)

connect()는 이벤트를 발생시키는 객체와 실제 실행할 코드를 연결하는 함수입니다.

지정한 이벤트가 발생하면 Qt가 자동으로 연결된 콜백 함수를 호출합니다.

&QPushButton::clicked

clicked()는 버튼이 클릭되었을 때 QPushButton이 자동으로 발생시키는 이벤트입니다.

Qt에서는 이러한 이벤트를 Signal이라고 부르며, 객체 내부에서 특정 상황이 발생했음을 다른 객체에게 알리는 역할을 합니다.

[&button]() {
    ...
}

이 람다 함수가 실제로 실행되는 콜백 함수(Callback Function) 입니다.

버튼이 클릭되면 Qt는 이 람다를 호출하고, 내부에 작성된 코드가 실행됩니다.

현대 C++에서는 별도의 함수를 만드는 대신 이처럼 작은 콜백을 람다 함수로 직접 작성하는 경우가 많습니다.

QMessageBox::information(...)

이 함수는 화면에 기본 정보 대화상자를 표시합니다.

매개변수는 다음과 같은 의미를 가집니다.

  • 부모 위젯
  • 창 제목
  • 메시지 내용

3. 프로그램 빌드하기

이번 강의에서는 소스 코드만 수정했기 때문에 프로젝트의 빌드 구조는 지난 강의와 동일합니다.

Qt 6에서는 계속해서 CMake를 사용하여 프로젝트를 관리합니다.

빌드 설정: CMakeLists.txt

cmake_minimum_required(VERSION 3.16)

project(HelloPopup)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt6 REQUIRED COMPONENTS Widgets)

add_executable(HelloPopup main.cpp)

target_link_libraries(HelloPopup PRIVATE Qt6::Widgets)

소스 코드를 수정한 뒤에는 프로젝트를 다시 빌드하면 됩니다.

mkdir -p build

cd build

cmake ..

make -j$(nproc)

./HelloPopup

프로그램을 실행하면 Hello, Popup! 이라는 버튼이 화면에 나타납니다.

버튼을 클릭하면 clicked() 이벤트가 발생하고, Qt가 연결된 콜백 함수를 실행하여 정보 메시지 대화상자를 화면에 표시합니다.


정리

이번 강의에서는 사용자 입력을 처리하는 가장 기본적인 방법을 살펴보았습니다.

여기서 기억해야 할 핵심은 다음과 같습니다.

  • **QObject::connect()**는 이벤트와 실행할 코드를 연결하는 함수입니다.
  • Signal은 객체 내부에서 특정 이벤트가 발생했음을 알리는 메커니즘입니다.
  • Lambda Function은 이벤트가 발생했을 때 실행되는 간단한 콜백 함수를 작성하는 데 자주 사용됩니다.
  • QMessageBox는 알림창, 경고창, 오류 메시지 등을 표시하는 표준 대화상자 클래스입니다.
  • **Event Loop (app.exec())**는 프로그램이 실행되는 동안 계속해서 이벤트를 감시하고 적절한 객체로 전달합니다.

다음 강의에서는 Qt의 핵심 개념인 Signals and Slots를 자세히 살펴보겠습니다. 버튼 클릭이 어떻게 콜백 함수까지 전달되는지, 그리고 객체들이 서로 어떻게 통신하는지 내부 동작 원리를 함께 알아보겠습니다.

Back

Comments

No comments yet.