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 시그널을 발신