Qt
Qt Signal / Slot
끄적a
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가 호출이 됨