项目的需要,需要使用qt编写一个arm端的图形操作界面,完成数据接受显示的功能,先在window版本的qt上搭建简单框架测试通过,如下:
#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));
}
}
运行结果:
上面两个用于启动和关闭接受数据线程;手动接受数据模拟手动接受数据的过程;自动接受可以实时自动接受子线程产生的数据,模拟自动接受过程,自动接受数据按钮重复按下可关闭自动接受过程;主线程操作独立与子线程,这里模拟进行加1显示操作,实际中可掉换为任何需要主线程自己独立进行的操作~。
在此基础上,可添加实际数据接受模块,并且移植到Linux即可~。