使用QT5完成一个数据处理图形界面的多线程Demo

使用QT5完成一个数据处理图形界面的多线程Demo

项目的需要,需要使用qt编写一个arm端的图形操作界面,完成数据接受显示的功能,先在window版本的qt上搭建简单框架测试通过,如下:

​​使用QT5完成一个数据处理图形界面的多线程Demo_第1张图片
main.cpp

#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{ 
QApplication a(argc, argv); 
MainWindow w; 
  w.show(); 
  return a.exec();
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include<QString>
#include <myreader.h>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    int kk = 0;
    int dd = 0;
public slots:
    void hasRead(QString);
    void hasReadAuto(QString);
private slots:
    void on_pushButton2_clicked();
    void on_pushButton3_clicked();
    void on_pushButton4_clicked();
    void on_pushButton5_clicked();
private:
    Ui::MainWindow *ui;
    MyReader * reader;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include"myreader.h"
#include<qthread.h>
#include<QDebug>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    qDebug()<<"Main Thread`s id:"<<this->thread()->currentThreadId();
    reader = new MyReader();
    connect(this->ui->pushButton,SIGNAL(clicked()),reader,SLOT(reading()));
    connect(reader,SIGNAL(hasread(QString)),this,SLOT(hasRead(QString)));
    connect(reader,SIGNAL(hasreadAuto(QString)),this,SLOT(hasReadAuto(QString)));
}
MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::hasRead(QString s)
{
    qDebug()<<"MainWindow::hasRead`s Thread id:"<<this->thread()->currentThreadId();
    this->ui->textBrowser->append(s);
    ui->textBrowser->update();
}
void MainWindow::hasReadAuto(QString s){
    if(dd%2==0){
        this->ui->textBrowser2->append(s);
    }
}
void MainWindow::on_pushButton2_clicked()  //手动接受
{
    ui->lineEdit->setText(QString::number(kk++));
}
void MainWindow::on_pushButton3_clicked()
{
    this->reader->start();
}
void MainWindow::on_pushButton4_clicked()
{
    this->reader->terminate();
    this->reader->destroyed();
}
void MainWindow::on_pushButton5_clicked() //自动接受Y&N
{
    if(dd%2==0){
        ui->textBrowser2->clear();
        dd = 1;
    }else{
        ui->textBrowser2->showNormal();
        dd = 0;
    }
}

myreader.h

#ifndef MYREADER_H
#define MYREADER_H
#include <QThread>
#include<QObject>
#include<QString>
class MyReader:public QThread
{
    Q_OBJECT
public:
    MyReader();
    ~MyReader();
    int ss;
signals:
    void hasread(QString);
    void hasreadAuto(QString);
 public slots:
    void reading();
protected:
    void run();
};
#endif // MYREADER_H

myreader.cpp

#include "myreader.h"
#include<QDebug>
#include<qthread.h>
#include<QFile>
#include <synchapi.h>
MyReader::MyReader()
{
}
MyReader::~MyReader()
{
}
void MyReader::reading()
{
    qDebug()<<"MyReader`s Thread id :"<<this->thread()->currentThreadId();
    emit hasread(QString::number(ss));
}
void MyReader::run(){
    for(ss = 99 ; ss < 150 ; ss++){
        qDebug()<<ss<<"---"<<ss;
        Sleep(1000);
        emit hasreadAuto(QString::number(ss));
    }
}

运行结果:
使用QT5完成一个数据处理图形界面的多线程Demo_第2张图片
上面两个用于启动和关闭接受数据线程;手动接受数据模拟手动接受数据的过程;自动接受可以实时自动接受子线程产生的数据,模拟自动接受过程,自动接受数据按钮重复按下可关闭自动接受过程;主线程操作独立与子线程,这里模拟进行加1显示操作,实际中可掉换为任何需要主线程自己独立进行的操作~。
在此基础上,可添加实际数据接受模块,并且移植到Linux即可~。

你可能感兴趣的:(Arm&Qt5)