Signal Slot

    Linux/Programming / / 2008. 12. 1. 10:43

    1. Label / PButton
    2. Header : <qlabel.h> <qpushbutton.h>
    3. Example
    3.1. PbLbSigEx.cpp

    #include "PbLbSigEx.h"

    PbLbSigEx::PbLbSigEx()
    {
         resize(140,60);
         myPb = new QPushButton("PButton",this);  // Push button 생성
         myPb->setGeometry(10,10,100,20);           // 버튼 위치 설정
         myLb = new QLabel("Button click, plz",this);    // Label 생성
         myLb->setGeometry(10,30,120,20);           // 라벨 위치

         // 시그널 등록, myPb를 click 하면, 이 클래스내의 myClicked()함수 수행
         connect(myPb,SIGNAL(clicked()),this,SLOT(myClicked()));  // 시그널 등록
    }

    void PbLbSigEx::myClicked()  // 슬롯 함수 정의
    {
          myLb->setText("Thanks!");    // Label의 글자를 Thanks!로 설정
    }

    int main(int argc, char** argv)
    {
         QApplication app(argc,argv);
         PbLbSigEx myPbLbSig;    // 클래스 정의
         app.setMainWidget(&myPbLbSig);   // 메인 위젯으로 등록
         myPbLbSig.show();  // 화면에 출력

         return app.exec();
    }


    3.2. PbLbSigEx.h 

    #ifndef PBLBSIG_H    // 헤더의 중복을 막기 위해서 사용
    #define PBLBSIG_H   // 중복된 헤더가 아니라면 PBLBSIG_H를 설정하고 아래의 사항을 적용

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

    // 클래스 선언
    class PbLbSigEx:public QWidget
    {
         Q_OBJECT    // 시그널 슬롯을 사용하려면 Q_Object를 사용해야 함
    public:
         PbLbSigEx();  // 생성자, 소멸자는 Default임.
    private:
        QPushButton *myPb;   // Push Button myPb선언
        QLabel *myLb;           // Label myLb선언
    protected slots:
        void myClicked();     // 시그널에 연결될 슬롯 함수 선언
    };

    #endif


    4. 컴파일 하기

    # qmake -project  -o PbLbSigEx.pro
    # qmake
    # make

    5. 실행결과

                                                                           
                                                                      <PButton을 클릭하면 Label이 변경됨>

                                                                                           

    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기