功能描述
- 实现窗口数据的接收与发送
- 设置串口通信相关参数
二 、串口调试助手代码实现
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QSerialPort>
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
QSerialPort *serialport;
private slots:
void on_openOrCloseBtn_clicked();
void serialport_readyRead_slot();
void on_clearBtn_clicked();
void on_sendBtn_clicked();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QSerialPortInfo>
#include <QMessageBox>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QStringList serialNames;
//创建串口对象
serialport = new QSerialPort(this);
//关联串口接收数据槽函数
connect(serialport,SIGNAL(readyRead()),this,SLOT(serialport_readyRead_slot()));
//获取可用的串口列表
foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
{
serialNames<<info.portName();
}
ui->serialCb->addItems(serialNames);
}
Widget::~Widget()
{
delete ui;
}
//接收数据槽函数
void Widget::serialport_readyRead_slot()
{
//将接收的数据强制转换成QString类型
QString buf = QString(serialport->readAll());
ui->textBrowser->append(buf);
}
void Widget::on_openOrCloseBtn_clicked()
{
if(ui->openOrCloseBtn->text() == "打开") //打开串口
{
//设置端口
serialport->setPortName(ui->serialCb->currentText());
//设置波特率
if(ui->baudCb->currentText() == "4800")
{
qDebug("波特率:4800");
serialport->setBaudRate(QSerialPort::Baud4800);
}else if(ui->baudCb->currentText() == "9600")
{
qDebug("波特率:9600");
serialport->setBaudRate(QSerialPort::Baud9600);
}else if(ui->baudCb->currentText() == "115200")
{
qDebug("波特率:115200");
serialport->setBaudRate(QSerialPort::Baud115200);
}
//设置数据位
if(ui->dataCb->currentText()=="5")
{
qDebug("数据位:5");
serialport->setDataBits(QSerialPort::Data5);
}else if(ui->dataCb->currentText()=="6")
{
qDebug("数据位:6");
serialport->setDataBits(QSerialPort::Data6);
}else if(ui->dataCb->currentText()=="7")
{
qDebug("数据位:7");
serialport->setDataBits(QSerialPort::Data7);
}else if(ui->dataCb->currentText()=="8")
{
qDebug("数据位:8");
serialport->setDataBits(QSerialPort::Data8);
}
//设置停止位
if(ui->stopCb->currentText()=="1")
{
qDebug("停止位:1");
serialport->setStopBits(QSerialPort::OneStop);
}else if(ui->stopCb->currentText()=="1.5")
{
qDebug("停止位:1.5");
serialport->setStopBits(QSerialPort::OneAndHalfStop);
}else if(ui->stopCb->currentText()=="2")
{
qDebug("停止位:2");
serialport->setStopBits(QSerialPort::TwoStop);
}
//设置校验位
if(ui->parityCb->currentText()=="none")
{
qDebug("检验位:none");
serialport->setParity(QSerialPort::NoParity);
}
if(serialport->open( QIODevice::ReadWrite)==true)
{
ui->openOrCloseBtn->setText("关闭");
QMessageBox::information(this,"提示",ui->serialCb->currentText()+"打开成功");
}else{
QMessageBox::critical(this,"提示","失败");
}
}else if(ui->openOrCloseBtn->text() == "关闭"){
//关闭串口
serialport->close();
QMessageBox::information(this,"提示",ui->serialCb->currentText()+"关闭成功");
ui->openOrCloseBtn->setText("打开");
}
}
void Widget::on_clearBtn_clicked()
{
//清空显示框
ui->textBrowser->clear();
}
void Widget::on_sendBtn_clicked()
{
//将数据发送出去
serialport->write(ui->lineEdit->text().toLocal8Bit().data());
}