MINERVA/C_CPP 2024. 1. 4. 13:06
반응형

시그널(Signal)과 슬롯(Slot)은 Qt에서 '이벤트'를 처리하고 객체 간 통신을 쉽게 구현할 수 있도록 도와줍니다.
처음 해당 내용을 공부할때는 WINDOW MFC에서 사용되는  BEGIN_MESSAGE_MAP( theClass, baseClass) 매크로가 생각되어 살짝 공포(?)감이 생각났습니다.
(https://learn.microsoft.com/ko-kr/cpp/mfc/reference/message-map-macros-mfc?view=msvc-170)

하지만, QT의 경우는 MFC 메시지 맵에 비해 매우 직관적이고, 사용방법에 일관성이 있어 매우 쉽게 익히고 사용을 하게 해주어 매우 만족스럽네요.

 

 

1. 시그널 (Signal):
시그널은 특정 이벤트가 발생했음을 나타내는 것입니다. 
예를 들어, 버튼이 클릭 또는 텍스트가 변경될 때와 같은 이벤트가 발생하면 시그널이 발생합니다.
Qt 객체, 특히 QWidget을 기반으로 하는 클래스들은 다양한 종류의 시그널을 가지고 있습니다.

2. 슬롯 (Slot):
슬롯은 시그널에 대한 반응으로 실행되는 함수나 메서드를 의미합니다.
슬롯은 사용자가 정의한 함수일 수도 있고, 이미 존재하는 함수일 수도 있습니다.
시그널과 슬롯은 1:N 또는 N:M 관계를 가질 수 있습니다. 
즉, 하나의 시그널은 여러 개의 슬롯에 연결될 수 있고, 여러 개의 시그널이 하나의 슬롯에 연결될 수도 있습니다.

3, 연결 (Connection):
시그널과 슬롯을 연결하여 시그널이 발생하면 연결된 슬롯이 실행됩니다. 
연결은 connect 메서드를 사용하여 설정됩니다.
시그널과 슬롯을 연결할 때, 시그널의 시그니처와 슬롯의 시그니처가 일치해야 합니다.

#include <QApplication>
#include <QPushButton>
#include <QObject>

class MyWidget : public QObject {
    Q_OBJECT

public slots:
    void onButtonClicked() {
        qDebug() << "버튼이 클릭되었습니다.";
    }
};

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);

    QPushButton button("클릭하세요!");
    MyWidget myWidget;

    // 버튼의 clicked() 시그널과 myWidget의 onButtonClicked() 슬롯을 연결합니다.
    QObject::connect(&button, SIGNAL(clicked()), &myWidget, SLOT(onButtonClicked()));

    button.show();
    return a.exec();

 

이 예제에서는 QPushButton의 clicked() 시그널과 MyWidget 클래스의 onButtonClicked() 슬롯을 연결하고 있습니다. 
버튼이 클릭되면 시그널이 발생하고, 연결된 슬롯이 실행되어 콘솔에 메시지를 출력합니다

반응형
posted by choiwonwoo
: