728x90

센서값을 수집해서 실시간으로 실행창에서 최신화하고 갱신하는 방법에 대해 소개해 드리겠습니다.

 

먼저 QThread를 상속받는 클래스를 하나 만들어 줍니다.

생성된 qTh.h 파일에 소스코드를 아래와 같이 써줍니다.

#ifndef QTH_H
#define QTH_H

#include <QThread>

class qTh : public QThread
{
    Q_OBJECT
public:
    explicit qTh(QObject* parent = 0);
private:
    void run();				// QThread 실행
signals:
    void setValue(int tmp);
};

#endif // QTH_H

qTh.cpp 파일도 아래와 같이 써줍니다.

signal에 setValue라는 함수를 만들어 줬습니다. setValue의 사용은 아래 ui의 cpp 파일의 connect 함수에서 사용합니다.

#include "qth.h"

qTh::qTh(QObject *parent) : QThread(parent)
{

}
void qTh::run()
{
    while(1)
    {
        int tmp = function();
        emit setValue(tmp);
        sleep(1);
    }
}

run() 함수의 while(1)안에 센서값을 받아오고 받아온 센서값을 emit setValue()를 통해 Ui로 전달해 줍니다.

 

그리고 기존에 있던 Ui 파일(저는 dialog.h / dialog.cpp)에 아래처럼 수정해줍니다.

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include "qth.h"

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = nullptr);
    ~Dialog();
private slots:
    void showValue(int tmp);

private:
    Ui::Dialog *ui;
    qTh* qthread;
};

#endif // DIALOG_H

여기선 slots에 showValue라는 함수로 이름을 지었습니다. 

 

이제 마지막으로 cpp 파일을 수정하면

#include "dialog.h"
#include "ui_dialog.h"
#include "qth.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    qthread = new qTh(this);
    connect(qthread, SIGNAL(setValue(int)), this, SLOT(showValue(int)));
    qthread->start();
}
void Dialog::showValue(int tmp)
{
    ui->tempValue->setText(QString::number(temp));
    ui->tempValue->setAlignment(Qt::AlignCenter);
}
Dialog::~Dialog()
{
    delete ui;
}

connect 함수를 이용해 setValue 함수와 showValue 함수를 연결해 setValue에서 넘어온 값을 showValue를 통해 ui의 label의 text를 수정해 주는 파일입니다.

 

저기서 setAlignment 함수는 text를 정렬해주는 함수이고 Qt::AlignCenter로 가운데 정렬을 해주었습니다.

 

아래 실행화면은 제가 위 함수에서 항목 몇가지를 추가하여 사용하고 있는 화면입니다.

온습도 미세먼지 센서 값을 수집해서 실시간으로 최신화 되고 있습니다.

자세한 코드는 아래 링크에서 확인하실 수 있습니다.

https://github.com/psy1064/DJU_OSP/tree/master/Raspberry

 

psy1064/DJU_OSP

대전대학교 오픈소스프로젝트. Contribute to psy1064/DJU_OSP development by creating an account on GitHub.

github.com

 

 

728x90

'Programming > Qt' 카테고리의 다른 글

Qt 클릭 이벤트 만들기  (0) 2020.04.10
Qt 데이터베이스(maria db) 연동해서 사용하기  (0) 2020.03.13
Qt Tcp 소켓통신하기(서버)  (0) 2019.11.20
Qt QLabel에 사진 넣기  (0) 2019.11.07
Qt 라이브러리 추가하기  (0) 2019.10.11

+ Recent posts