본문 바로가기

QT/QT 4.6.2

시그널(Signal) / 슬롯(Slot)을 이용한 위젯 닫기

간단하게 시그널, 슬롯을 이용하여 QPushButton 위젯을 띄운 후 이 버튼을 클릭을 하게 되면
닫히도록 하는 것을 해 보겠다.
일단 시그널, 슬롯을 간단하게 설명하면,

"내가 휴대폰으로 전화를 걸면 상대편이 받는다. " 라는 예로 설명을 하면
전화를 걸면 => 시그널
상대편이 받는다. => 슬롯
이렇게 시그널이라는 동작이 생기면, 슬롯이라는 행동을 한다.
라고 간단히 생각하면 된다.

그래서 처음에 하기로 한 작업인 QPushButton 위젯을 띄운 후 이 버튼을 클릭을 하게 되면
닫히도록 하는 것은 버튼을 클릭하는 것을 시그널로 닫히도록 하는 것은 슬롯으로
나타낸다고 생각하면 될 것 같다.  

그럼 일단, 소스 부터 보면,

#include 
#include 
#include 


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QPushButton *button = new QPushButton;

    button->setText("close");

    button->show();

    QObject::connect(button, SIGNAL(clicked()), &app, SLOT(quit()));

    return app.exec();
}



이렇게 구현이 되며,

결과 화면은
이렇게 일반 버튼 위젯을 띄울때와 같다.
하지만 저 close 버튼을 누르게 되면, 위젯이 사라지게 된다.

간단하게 소스 분석을 하게 되면,

QObject::connect(button, SIGNAL(clicked()), &app, SLOT(quit()));

이 부분이 시그널, 슬롯을 하는 함수인데,
이 함수는 보는 것 처럼 QObject 클래스에 속해 있는 멤버함수 connect를 이용하게 된다.

connect함수의 원형을 보게 되면,
bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method,     
                                 Qt::ConnectionType type = Qt::AutoConnection )

이렇게 되어 있다.
첫번째 인자에는 시그널 동작을 할 위젯이나, 다이얼로그 등의 객체를 적어 주고,
두번째 인자에는 어떤 시그널을 할 것인지, 
세번째 인자에는 그 시그널로 인하여 동작을 이룰 위젯이나, 다이얼로그 등의 객체를 적으며,
네번째 인자에는 동작할 슬롯을 적어 주면 된다.

그래서 위 소스의 내용을 분석하면, button 위젯이 클릭이 될때 생성된 어플리케이션이 quit 즉, 종료 되라 라는
시그널 슬롯을 만들었다.

'QT > QT 4.6.2' 카테고리의 다른 글

간단한 파일 입 / 출력 하기!!  (0) 2010.04.30
시그널(Signal) / 슬롯(Slot)을 이용한 메세지 띄우기  (0) 2010.04.27
두개의 버튼을 하나의 창에 띄우기!!  (0) 2010.04.24
버튼 출력하기  (0) 2010.04.24
Hello QT!!  (0) 2010.04.21