ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Qt Signal / Slot
    Qt 2020. 12. 31. 17:11

    Qt는 이벤트 처리를 Signal과 Slot로 한다. 

    connect(object1, signal, object2, signal)

    object1 : 이벤트가 발생하는 object

    signal : 시그널 종류(ex, click, move 등)

    object2 : slot가 있는 object

    slot : 시그널 발생시 호출될 함수 

     

    아래는 SignalSlot에 customSignal이 발생이 되면 Widget에 setValue slot이 호출되는 예제이다 .

    (customSignal을 발생 시키기 위해 occuredSignal함수에서 emit으로 signal을 발생 시킨다.)

     

    header파일

    class SignalSlot : public QObject
     {
         Q_OBJECT
    
     public:
        void occuredSignal(int val) {
            emit customSignal(val);
        }
    
     signals:
         void customSignal(int val);
    
     private:
         int m_value;
    };
    
    //------------------------------------------
    
    class Widget : public QWidget
    {
        Q_OBJECT
    
    public:
        Widget(QWidget *parent = nullptr);
        ~Widget();
    
    private:
        QLabel *lbl;
    
    public slots:
        void setValue(int val);
    
    };

    signal과 Slot을 사용하기 위해서는 Q_OBJECT 를 선언해주어야 한다.

    signal은 "signals:" 에 선언 하면 된다. signal의 경우 선언만 해주고 구현은 안해줘도 된다. 

    slot도 "slots:"에 선언해주면된다.

     

    구현 파일

    Widget::Widget(QWidget *parent)
        : QWidget(parent)
    {
        lbl = new QLabel("", this);
        lbl->setGeometry(10, 10, 250, 40);
        SignalSlot signalSlot;
        connect(&signalSlot, &SignalSlot::customSignal, this, &Widget::setValue);
        signalSlot.occuredSignal(50);
    }
    
    
    void Widget::setValue(int val)
    {
        QString labelText = QString("시그널 발생, Value : %1").arg(val);
        lbl->setText(labelText);
    }

    SignalSlot의 인스턴스를 signalSlot로 만듬. 

    connect에서 signalSlot의 customSignal이 호출이 되면 Widget의 setValue가 호출되도록 설정

    signalSlot.occuredSignal(50); 을 통해 customSignal을 발생

    Signal이 발생되면 Widget의 setValue가 호출이 됨

    'Qt' 카테고리의 다른 글

    Qt Quick and QML 설명  (0) 2021.02.05
    Qt QtConcurrent(Qt thread)  (0) 2021.01.05
    Qt Designer  (0) 2021.01.04
    Qt 프로젝트 파일(.pro)  (0) 2020.12.24
    Qt 설치 하기  (0) 2020.12.22
Designed by Tistory.