처음 Qt를 접했을때 connect 함수의 사용법이 어렵다고 느껴졌었다. 공식 문서를 살펴보면 사용방법이 아래와 같이 작성되어 있었기에 상당히 겁이났다. 그래서 왠만하면 다른 방법으로 우회해서 기능을 구현했었는데, 사용법을 익히고보니 이렇게 쉬운걸 왜 쩔쩔맸나 싶은 생각이 들었다. 프로그래밍의 난이도는 낮추고 퀄리티는 쉽게 올릴 수 있었다!

1
QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)

필자는 connect 함수를 Timer와 연결하는데 사용하였다. 이때 Timer를 포인터로 생성하는 경우 더 간단해진다. connet 함수에서 포인터를 매개 변수로 받기 때문이다.

1
2
3
4
5
#include <QTimer>

QTimer *timer = new QTimer;
timer->start();
timer->setInterval(10000);

QTimer를 동적으로 할당하였다. Interval의 단위는 msec이므로 위 소스코드에선 10초마다 이벤트가 발생한다. connect와 연결된 함수는 헤더파일의 클래스 중 private slots부분에 선언해 주어야 한다. Qt에서 자동으로 이벤트를 생성하면 전부 private slots에 삽입되는데, 우리가 만들 함수도 그곳에 넣는다.

1
2
private slots:
    void Function();

필자가 구현할 Function() 함수는 메세지 박스를 띄어주는 기능을 할 것이다.

1
#include <QMessageBox>
1
2
3
4
void MainWindow::Function()
{
    QMessageBox::infomation(this,"Infomation","10 Second Later.","OK");
}


connect

이제 대망의 connect 함수의 사용법이다. 위에선 어렵게 나열되어 있었지만 정말 간단하다.

1
connect(timer, SIGNAL(timeout(), this, SLOT(Function()));

동적으로 생성한 timertimeout() 신호가 발생하면 이 클래스의 슬롯인 Funcion() 함수가 발생한다고 생각하면 된다.

WRITTEN BY

배진오

소비적인 일보단 생산적인 일을 추구하며, 좋아하는 일을 잘하고 싶어합니다 :D
im@baejino.com