-
Qt Signal / SlotQt 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