QT Signal & Slot

Smile:)today·2024년 7월 17일

QT는 모든 이벤트 처리를 할 때 시그널(Signal)과 슬롯(Slot)을 사용
버튼 클릭 -> 시그널
시그널 발생 시, 호출하는 함수 -> 슬롯

시그널과 슬롯 함수를 연결하는 함수 -> QObject 클래스의 connect()
connect(a, b, c, d);
a: 이벤트가 발생한 오브젝트(클래스의 인스턴스)
b: 오브젝트의 시그널(이벤트)
c: 시그널과 호출할 슬롯 함수가 있는 오브젝트의 이름
d: 시그널 발생 시, 호출할 슬롯 함수

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

class MyWindow : public QWidget {
    Q_OBJECT

public:
    MyWindow() {
        QPushButton *button = new QPushButton("Click me", this);
        connect(button, &QPushButton::clicked, this, &MyWindow::onButtonClicked);
    }

public slots:
    void onButtonClicked() {
        QMessageBox::information(this, "Information", "Button was clicked!");
    }
};

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

    MyWindow window;
    window.show();

    return app.exec();
}

예시

#include <QObject>

class Counter : public QObject // Counter클래스는 QObject클래스를 상속받음
{
    Q_OBJECT // 이 클래스가 QT의 메타-객체 시스템을 사용한다는 것을 나타내며 시그널 슬롯 메커니즘을 사용할 수 있게 함, 시그널 슬롯시 선언 필수

public:
    Counter() { m_value = 0; } // 초기화

    int value() const { return m_value; } // m_value를 반환하는 getter 함수, Counter 객체의 상태를 변경하지 X

public slots:
    void setValue(int value); //slot 정의, m_value를 설정하는 함수로 시그널을 받을 수 있는 함수

signals:
    void valueChanged(int newValue); //signal 정의, 시그널은 주로 클래스의 상태가 변경되었을 때 외부로 알리기 위해 사용됨

private:
    int m_value; // Counter 객체의 현재 값을 저장하는 정수형 멤버 변수
};

Counter클래스는 QObject을 상속받아 시그널-슬롯 메커니즘을 사용
m_value 멤버 변수는 카운터값 저장
value 함수는 현재 값 반환
setValue 슬롯은 값을 설정하고, 값이 변경되면 valueChanged 시그널을 발신

출처

1

profile
Hi, I'm vitamin

0개의 댓글