슬롯은 멤버함수이면서 시그널, 즉 이벤트가 발생했을 때, 처리할 수 있도록 준비된 조금은 성격이 다른 멤버함수입니다. 윈도우 프로그래밍을 하시는 분들은 이벤트핸들러로 생각하면 이해하기 쉽습니다. 좀 특이한 점은 각 위젯별로 기본 슬롯함수가 있습니다.

예로 라벨위젯 같은 경우 화면에 보이거나 감추는 슬롯이 있고, 델파이의 Appliation 객제와 비슷한 qapp 는 프로그램을 종료하는 quit() 슬롯이 있습니다.

  1. 버튼 클릭으로 프로그램 종료
  2. 라벨 토글

버튼 클릭으로 프로그램 종료

#include <qapplication.h>
#include <qwidget.h>
#include <qpushbutton.h>
#include <qstring.h>
#include <qpainter.h>

#define kor(str) QString::fromLocal8Bit(str)

class TForm:public QWidget
{
private:
  QPushButton *btnClose;
public:
  TForm();
};

TForm::TForm()
{
  btnClose = new QPushButton( kor( "&Q) 종료!!"), this);
  btnClose->setGeometry( 40, 40, 80, 40);
  connect( btnClose, SIGNAL( clicked()), qApp, SLOT(quit()));

  setCaption("Close Button");
}

int main(int argc, char **argv)
{
  QApplication app(argc, argv);
  TForm frm;

  app.setMainWidget( &frm);
  frm.resize( 300, 100);
  frm.show();

  return app.exec();
}

라벨위젯 화면 토글

길게 말하기가 그래서 화면 토글이라고 했습니다. 버튼1 을 누르면 라벨을 감추고, 버튼2 를 누르면 다시 화면에 출력하도록 하는 예제입니다.

#include <qapplication.h>
#include <qwidget.h>
#include <qlabel.h>
#include <qpushbutton.h>
#include <qstring.h>
#include <qpainter.h>

#define kor(str) QString::fromLocal8Bit(str)

class TForm:public QWidget
{
private:
  QPushButton *btn1, *btn2, *btnClose;
  QLabel *lab;
public:
  TForm();
};

TForm::TForm()
{
  lab = new QLabel(this);
  lab->setText( kor( "라벨 슬롯 테스트"));
  lab->setGeometry(60, 60, 200, 20);

  btn1 = new QPushButton( "&Hide!!", this);
  btn1->setGeometry( 40, 20, 80, 30);
  btn2 = new QPushButton( "&Show!!", this);
  btn2->setGeometry( 160, 20, 80, 30);

  connect( btn1, SIGNAL( clicked()), lab, SLOT(hide()));
  connect( btn2, SIGNAL( clicked()), lab, SLOT(show()));

  btnClose = new QPushButton( kor( "&Q) 종료!!"), this);
  btnClose->setGeometry( 160, 60, 80, 30);
  connect( btnClose, SIGNAL( clicked()), qApp, SLOT(quit()));

  setCaption("Show/Hide Label");
}

int main(int argc, char **argv)
{
  QApplication app(argc, argv);
  TForm frm;

  app.setMainWidget( &frm);
  frm.resize( 300, 100);
  frm.show();

  return app.exec();
}

 

태그: *QT *그래픽