connect 사용법 ( SIGNAL , SLOT ) 다루기
편리한 점은 신호는 주는 쪽 [SIGNAL] 과 받는 쪽 [SLOT] 의 메서드 형태만 같으면 별도의 핸들러 구현 없이 값을 주고 받을 수 있다.
하지만 SIGNAL 과 SLOT 키워드를 사용하기 위하여 QObject 를 구현 해야 한다.
SLOT 메서드를 구현 하려면 헤더에 [ publuc slots : ] 하위에 메서드를 선언 하고 cpp 에서 구현 하여야 한다.
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui; public slots: void ValueReceiver(int v); }; #endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> #include "customconnectobject.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // UI 객체 에서 다른 UI 객체로 바로 연결 connect(ui->horizontalSlider , SIGNAL(valueChanged(int)) , ui->progressBar , SLOT(setValue(int))); // UI 객체에서 메서드로 연결 connect(ui->horizontalSlider , SIGNAL(valueChanged(int)) , this , SLOT(ValueReceiver(int))); // Custom 으로 connect 를 위한 SIGNAL , SLOT 을 구현함 CustomConnectObject * cco =new CustomConnectObject(); // Custom 객체에서 메서드로 연결 connect(cco , SIGNAL(CustomValueChange(int)) , this , SLOT(ValueReceiver(int))); // Custom 객체에서 UI 객체로 연결 connect(cco , SIGNAL(CustomValueChange(int)) , ui->progressBar , SLOT(setValue(int))); } void MainWindow::ValueReceiver(int v) { qDebug() << "value : " << v; } MainWindow::~MainWindow() { delete ui; }
signal 을 직접 구현 할때는 헤더에 선언 하고, 구현코드를 넣을 필요는 없다. [ signals : ] 키워드 하위에 작성 하여야 한다.
신호를 날릴때는 emit 키워드를 사용하고 메서드를 호출 하면 된다.
customconnectobject.h
#ifndef CUSTOMCONNECTOBJECT_H #define CUSTOMCONNECTOBJECT_H #include <QObject> #include <QTimer> class CustomConnectObject : public QObject { Q_OBJECT public: CustomConnectObject(); private : int count; QTimer* timer; public slots: void CatchTiming(); signals: void CustomValueChange(int v); }; #endif // CUSTOMCONNECTOBJECT_H
#include "customconnectobject.h" CustomConnectObject::CustomConnectObject() { timer = new QTimer(this); count = 0; connect(timer , SIGNAL(timeout()) , this , SLOT(CatchTiming()) ); timer->start(1000); } void CustomConnectObject::CatchTiming() { emit CustomValueChange(count); count ++; }
'C++(Qt)' 카테고리의 다른 글
리소스 사용과 임베팅 폰트 (0) | 2015.09.24 |
---|---|
Static 으로 빌드 하기 (0) | 2015.09.24 |
Qt 를 이용하여 슬라이더 만들기 - 1 (0) | 2015.09.22 |
Qt 로 간단한 TraceBox 만들기 (0) | 2015.09.09 |
connect 사용법 ( SIGNAL , SLOT ) 다루기 (2) | 2015.08.26 |
Qt 커뮤니티 버전의 배포 요령 (0) | 2015.08.05 |
C++(Qt)
2015. 8. 26. 23:39
댓글을 달아 주세요
안녕하세요? 지나가는 사람입니다.
잘 보고 갑니다
감사합니다 ^----^