timer类
#ifndef MYTIMER_H
#define MYTIMER_H
#include <QTimer>
#include <qdatetime.h>
class MyTimer : public QTimer
{
public:
MyTimer();
QString gettimer();
QString timetoString;
};
#endif
#include "mytimer.h"
MyTimer::MyTimer()
{
}
QString MyTimer::gettimer()
{
QDateTime time = QDateTime::currentDateTime();
timetoString = time.toString("yyyy-MM-dd hh:mm:ss");
return timetoString;
}
serial类
#ifndef SERIALPORT_H
#define SERIALPORT_H
#include "mytimer.h"
#include <QMainWindow>
#include <QDebug>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include <QTextCodec>
namespace Ui {
class SerialPort;
}
class SerialPort : public QMainWindow
{
Q_OBJECT
public:
explicit SerialPort(QWidget *parent = 0);
~SerialPort();
private:
Ui::SerialPort *ui;
QSerialPort *serial;
bool if_show_time = false;
bool if_auto_enter= false;
MyTimer mytimer;
private slots:
void on_clearButton_clicked();
void on_clearsendButton_clicked();
void on_sendButton_clicked();
void on_openButton_clicked();
void onTimeStateChanged(int state);
void onLineStateChanged(int state);
void Read_Data();
};
#endif
#include "serialport.h"
#include "ui_serialport.h"
SerialPort::SerialPort(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::SerialPort)
{
ui->setupUi(this);
connect(ui->timeCheckBox, SIGNAL(stateChanged(int)), this, SLOT(onTimeStateChanged(int)));
connect(ui->lineCheckBox, SIGNAL(stateChanged(int)), this, SLOT(onLineStateChanged(int)));
//查找可用的串口
foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
QSerialPort serial;
serial.setPort(info);
if(serial.open(QIODevice::ReadWrite))
{
ui->serialBox->addItem(serial.portName());
serial.close();
}
}
//设置波特率下拉菜单默认显示第三项
ui->bondBox->setCurrentIndex(3);
//关闭发送按钮的使能
ui->sendButton->setEnabled(false);
}
SerialPort::~SerialPort()
{
delete ui;
}
//读取接收到的数据
void SerialPort::Read_Data()
{
QByteArray recvQBA = serial->readAll();
QTextCodec *tc = QTextCodec::codecForName("GBK");
QString recvQStr = tc->toUnicode(recvQBA);
if(!recvQStr.isEmpty())
{
QString str = ui->receiveBrowser->toPlainText();
str+=recvQStr;
if(if_show_time)
{
str += "[";
str += mytimer.gettimer();
str += "]";
}
if(if_auto_enter)
{
str += "\r\n";
}
ui->receiveBrowser->clear();
ui->receiveBrowser->append(str);
//ui->receiveBrowser->append(recvQStr);
}
recvQBA.clear();
// QByteArray buf;
// buf = serial->readAll();
// if(!buf.isEmpty())
// {
// QString str = ui->receiveBrowser->toPlainText();
// str+=tr(buf);
// ui->receiveBrowser->clear();
// ui->receiveBrowser->append(str);
// }
// buf.clear();
}
void SerialPort::on_openButton_clicked()
{
if(ui->openButton->text()==tr("打开串口"))
{
serial = new QSerialPort;
//设置串口名
serial->setPortName(ui->serialBox->currentText());
//打开串口
serial->open(QIODevice::ReadWrite);
//设置波特率
serial->setBaudRate(ui->bondBox->currentText().toInt());
//设置数据位数
switch(ui->dateBox->currentIndex())
{
case 8: serial->setDataBits(QSerialPort::Data8); break;
default: break;
}
//设置奇偶校验
switch(ui->oddevenBox->currentIndex())
{
case 0: serial->setParity(QSerialPort::NoParity); break;
default: break;
}
//设置停止位
switch(ui->stopBox->currentIndex())
{
case 1: serial->setStopBits(QSerialPort::OneStop); break;
case 2: serial->setStopBits(QSerialPort::TwoStop); break;
default: break;
}
//设置流控制
serial->setFlowControl(QSerialPort::NoFlowControl);
//关闭设置菜单使能
ui->serialBox->setEnabled(false);
ui->bondBox->setEnabled(false);
ui->dateBox->setEnabled(false);
ui->oddevenBox->setEnabled(false);
ui->stopBox->setEnabled(false);
ui->openButton->setText(tr("关闭串口"));
ui->sendButton->setEnabled(true);
//连接信号槽
QObject::connect(serial, &QSerialPort::readyRead, this, &SerialPort::Read_Data);
}
else
{
//关闭串口
serial->clear();
serial->close();
serial->deleteLater();
//恢复设置使能
ui->serialBox->setEnabled(true);
ui->bondBox->setEnabled(true);
ui->dateBox->setEnabled(true);
ui->oddevenBox->setEnabled(true);
ui->stopBox->setEnabled(true);
ui->openButton->setText(tr("打开串口"));
ui->sendButton->setEnabled(true);
}
}
//清空接受窗口
void SerialPort::on_clearButton_clicked()
{
ui->receiveBrowser->clear();
}
//发送数据
void SerialPort::on_sendButton_clicked()
{
QString sendmesg = ui->sendEdit->toPlainText() + "\r\n";
serial->write(sendmesg.toLatin1());
// serial->write(ui->sendEdit->toPlainText().toLatin1());
}
void SerialPort::on_clearsendButton_clicked()
{
ui->sendEdit->clear();
}
void SerialPort::onTimeStateChanged(int state)
{
if (state == Qt::Checked) // "选中"
{
//qDebug() << tr("选中");
if_show_time = true;
}
else if(state == Qt::PartiallyChecked) // "半选"
{
if_show_time = false;
}
else // 未选中 - Qt::Unchecked
{
if_show_time = false;
}
}
void SerialPort::onLineStateChanged(int state)
{
if (state == Qt::Checked) // "选中"
{
if_auto_enter = true;
}
else if(state == Qt::PartiallyChecked) // "半选"
{
if_auto_enter = false;
}
else // 未选中 - Qt::Unchecked
{
if_auto_enter = false;
}
}