728x90
반응형
Qt의 이벤트 루프(event loop)
는 GUI 애플리케이션에서 중요한 역할을 하는 구조로, 프로그램이 사용자 입력(예: 마우스 클릭, 키보드 입력) 및 기타 이벤트(예: 타이머, 네트워크 이벤트 등)를 지속적으로 처리하고 응답할 수 있게 합니다. 이벤트 루프는 애플리케이션이 실행되는 동안 계속해서 돌아가면서 이벤트 큐(Event Queue)
에서 이벤트를 가져와 적절한 이벤트 핸들러로 전달하는 역할을 합니다.
-
QCoreApplication/QGuiApplication/QApplication:
QCoreApplication
은 모든 Qt 애플리케이션의 기본 클래스입니다.QGuiApplication
은 GUI 기능을 사용하는 애플리케이션을 위한 클래스입니다.QApplication
은 위의 두 클래스를 모두 포함하는 가장 일반적인 클래스입니다.
-
exec() 메서드:
exec()
메서드를 호출하면 이벤트 루프가 시작됩니다. 이 메서드는 애플리케이션이 종료될 때까지 반환하지 않습니다.
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MainWindow window;
window.show();
return app.exec(); // 이벤트 루프 시작
}
-
이벤트 큐:
- Qt의 이벤트 루프는 이벤트 큐를 사용하여 들어오는 모든 이벤트를 관리합니다. 이벤트는 큐에 추가된 순서대로 처리됩니다.
-
이벤트 처리:
- 각 이벤트는 관련된 객체와 연결된 이벤트 핸들러에 의해 처리됩니다. Qt는 다양한 이벤트 타입(e.g., QMouseEvent, QKeyEvent)과 해당 이벤트를 처리하기 위한 핸들러 메서드를 제공합니다.
-
이벤트 큐에 이벤트 추가:
- 사용자 입력, 타이머, 네트워크 등의 이벤트가 발생하면 이벤트 큐에 추가됩니다.
-
이벤트 처리:
- 이벤트 루프는 큐에서 이벤트를 하나씩 가져와서 적절한 객체로 전달합니다.
- 전달된 이벤트는 해당 객체의 이벤트 핸들러 메서드에 의해 처리됩니다. 예를 들어, 마우스 클릭 이벤트는 QWidget의 mousePressEvent(QMouseEvent *event) 메서드에서 처리될 수 있습니다.
-
이벤트 루프의 지속적 실행:
- 이벤트 루프는 exec() 메서드가 호출된 이후 계속해서 실행되며, 큐에 이벤트가 남아 있는 한 이를 처리합니다.
- 애플리케이션이 종료될 때까지 이벤트 루프는 멈추지 않습니다. 종료 요청이 들어오면 quit() 메서드가 호출되어 이벤트 루프가 종료됩니다.
#include <QApplication>
#include <QWidget>
#include <QPushButton>
class MyWidget : public QWidget {
public:
MyWidget() {
QPushButton *button = new QPushButton("Click me", this);
connect(button, &QPushButton::clicked, this, &MyWidget::handleButtonClick);
}
private slots:
void handleButtonClick() {
// 버튼 클릭 이벤트 처리
qDebug("Button was clicked!");
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MyWidget window;
window.show();
return app.exec(); // 이벤트 루프 시작
}
- 이 예제에서는 버튼 클릭 이벤트를 처리하는 간단한 Qt 애플리케이션을 보여줍니다. app.exec()가 호출되면 이벤트 루프가 시작되어 버튼 클릭과 같은 이벤트를 처리합니다.
728x90
반응형
'Qt' 카테고리의 다른 글
Qt Maintenance Tool (Changing Qt mirror site) (0) | 2024.09.11 |
---|---|
TinyORM : Modern C++ ORM library (0) | 2024.08.28 |
Qt의 shared_ptr와 std::weak_ptr : QSharedPointer와 QWeakPointer (0) | 2024.07.25 |
Qt의 QPointer와 Modern C++의 포인터(pointer) (0) | 2024.07.25 |
Qt 5.15 수명 연장 (0) | 2024.05.09 |