如题,
#include "ui_mainwindow.h"
#include "mainwindow.h"
#include "Thread_1.h"
#include "Thread_2.h"
MainWindow::MainWindow(QWidget *parent) : //开始运行
QMainWindow(parent),
ui(new Ui::MainWindow) //初始化指针UI
{
ui->setupUi(this);
thread_1=new QThread(this);
worker_1=new Thread_1();
worker_1->moveToThread(thread_1); //用moveToThread函数转移到一个Thread里
thread_2=new QThread(this);
worker_2=new Thread_2();
worker_2->moveToThread(thread_2); //用moveToThread函数转移到一个Thread里
//定时器_1
ui->timer_th_1->setCheckable(true); //Checkable就能有两种状态-对应定时器开关
connect(ui->timer_th_1,&QPushButton::clicked,worker_1,&Thread_1::slotTimerSwitch_1);
connect(worker_1,&Thread_1::signalMessage_1,ui->textEditA_1,&QTextEdit::append); //worker操作结果
connect(worker_1,&Thread_1::signalMessage_1,this,[this]{
on_com_send_clicked(); //串口发送
}); //worker操作结果
//append = 追加数据 setText = 唯一数据
thread_1->start(); //启动线程
//定时器_2
ui->timer_th_2->setCheckable(true); //Checkable就能有两种状态-对应定时器开关
connect(ui->timer_th_2,&QPushButton::clicked,worker_2,&Thread_2::slotTimerSwitch_2);
connect(worker_2,&Thread_2::signalMessage_2,ui->textEditA_2,&QTextEdit::append); //worker操作结果
thread_2->start(); //启动线程
myCom = new QSerialPort();//这个在.h中定义了 QSerialPort *myCom;//声明对象
myCom->setPortName("/dev/ttyUSB0");//串口的名称
myCom->open(QIODevice::ReadWrite);//读写模式
myCom->setBaudRate(QSerialPort::Baud115200);//波特率
myCom->setBaudRate(QSerialPort::Data8);//8位数据
myCom->setParity(QSerialPort::NoParity);//无校验位
myCom->setStopBits(QSerialPort::OneStop);//1位停止
myCom->setFlowControl(QSerialPort::NoFlowControl);//无数据流控制
connect(myCom,SIGNAL(readyRead()),this,SLOT(getdata()));//连接接收的槽函数
}
MainWindow::~MainWindow() //结束运行
{
thread_1->quit();
thread_1->wait();
thread_2->quit();
thread_2->wait();
delete ui;
}
void MainWindow::on_clear_data_1_clicked() //清除1按钮事件
{
ui->textEditA_1->clear();
}
void MainWindow::on_clear_data_2_clicked() //清除2按钮事件
{
ui->textEditA_2->clear();
}
void MainWindow::getdata()
{
QByteArray com_receive_data = myCom->readAll(); //接收数据,qByteArray是最常用的
if (*com_receive_data.data() == '*')
buff = "";
else
{
buff += com_receive_data;
ui->time_label_up_1->setText(buff);
}
}
void MainWindow::on_com_send_clicked() //串口发送
{
QByteArray com_send_data = "*ABCDEFGHIJK*"; //发送数据,qByteArray是最常用的类
myCom->write(com_send_data, com_send_data.size()); //发送
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include<QSerialPort>
#include "Thread_1.h"
#include "Thread_2.h"
namespace Ui { //命名空间
class MainWindow; //一个声明
}
class MainWindow : public QMainWindow //公有继承
{
Q_OBJECT //还要加上Q_OBJECT宏才能支持信号槽
public: //公有
explicit MainWindow(QWidget *parent = 0); //主函数
~MainWindow();
QByteArray buff; //叠加数据,qByteArray是最常用的类
QSerialPort *myCom;
protected: //受保护
private: //私有
Ui::MainWindow *ui; //指针UI
QThread *thread_1, *thread_2;
Thread_1 *worker_1;
Thread_2 *worker_2;
signals: //信号
void signalDoing_1(const QString &str);
void signalDoing_2(const QString &str);
private slots: //公共槽
void on_clear_data_1_clicked(); //清除1按钮事件
void on_clear_data_2_clicked(); //清除2按钮事件
void getdata();
void on_com_send_clicked(); //串口发送
};
#endif