connect 사용법 ( SIGNAL , SLOT ) 다루기

편리한 점은 신호는 주는 쪽 [SIGNAL] 과 받는 쪽 [SLOT] 의 메서드 형태만 같으면 별도의 핸들러 구현 없이 값을 주고 받을 수 있다.
하지만 SIGNAL 과 SLOT 키워드를 사용하기 위하여 QObject 를 구현 해야 한다.

SLOT 메서드를 구현 하려면 헤더에 [ publuc slots : ] 하위에 메서드를 선언 하고 cpp 에서 구현 하여야 한다.



mainwindow.h
#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



customconnectobject.cpp
#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 ++;
}







Yamecoder 야매코더_
C++(Qt) 2015.08.26 23:39
Powerd by Tistory, designed by criuce
rss