defaultK

[Qt 프로그래밍] Signal 과 Slot 이해하기 본문

Qt 프로그래밍/Basic Qt

[Qt 프로그래밍] Signal 과 Slot 이해하기

kwoss2341 2021. 2. 24. 20:19

doc.qt.io/qt-5/signalsandslots.html

 

Signals & Slots | Qt Core 5.15.2

Signals & Slots Signals and slots are used for communication between objects. The signals and slots mechanism is a central feature of Qt and probably the part that differs most from the features provided by other frameworks. Signals and slots are made poss

doc.qt.io

 

 

 

Qt의 중요한 특징 signal 과 slot이다

그림과 같이 Object1에 signal1이 발생하면 Object2의 slot1이 구동된다.

 

connect를 이용하여 connect(Object1,signal1,Object2,slot2);

Object1의 signal1과 Object2의 slot2을 연결한다.

 

 

예시:

 

 

#include <QObject>

class Counter : public QObject
{
    Q_OBJECT

public:
    Counter() { m_value = 0; }

    int value() const { return m_value; }

public slots:
    void setValue(int value); //slot 정의

signals:
    void valueChanged(int newValue); //signal 정의

private:
    int m_value;
};

 

QObject를 상속받은 Counter 클래스를 정의해 준다.

Counter 클래스의 signal과 slot역시 정의해 준다.

 

void Counter::setValue(int value)
{
    if (value != m_value) {
        m_value = value;
        emit valueChanged(value); 
    }
}

 

setValue가 일어나면 valueChanged signal이 발생한다.

 

    Counter a, b;
    QObject::connect(&a, &Counter::valueChanged,
                     &b, &Counter::setValue);

    a.setValue(12);     // a.value() == 12, b.value() == 12
    b.setValue(48);     // a.value() == 12, b.value() == 48

 

main에서 Counter 객체 a,b를 생성한뒤 a의 signal(valueChanged)와 b의 slot(setValue)를 연결해 준다.

 

a.setValue(12)를 통해 a클래스의 setValue() 메소드에서 signal(valueChanged)이 발생하고

a의 signal이 발생함에 따라 b의 setValue() slot이 구동되어 b.value()==12가 되게 된다.

 

반대로 b.setValue(48)을 하면 connect는 a object의 signal과 b object의 slot만 연결되어 있기 때문에

b의 m_value값만 바뀌고 a의 값은 변하지 않는다.

 

Comments