一、创建串口调试助手UI界面
1、首先生成串口连接必要参数界面,删除关闭串口控件
2、给参数下拉框添加常见的选项,删除关闭串口控件
3、将串口调试助手参数界面布局整齐,删除关闭串口控件
4、更改控件名字,方便后续编程,删除关闭串口控件
5、添加剩余的控件组成串口调试助手的UI界面,删除关闭串口控件
二、 编辑串口调试助手代码
1、在pro文件中加入serialport
2、编写代码
widget.c
#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
#include <QtSerialPort>
#include <QSerialPortInfo>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
setWindowTitle("Serial_Port");
serial = new QSerialPort(this);
//通过QSerialPortInfo查找可用串口,但存在一个局限,如果在软件打开后在插入串口,此时串口不可以识别到
ui->serailCB->clear();
foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
ui->serailCB->addItem(info.portName());
}
//信号与槽函数,当串口接收到数据后转到对应的接收函数
connect(serial,SIGNAL(readyRead()),this,SLOT(serialPort_readyRead()));
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_openSerialBut_clicked()
{
if(ui->openSerialBut->text()==QString("打开串口"))
{
//设置串口名
serial->setPortName(ui->serailCB->currentText());
//设置波特率
serial->setBaudRate(ui->baundDrateCB->currentText().toInt());
//设置数据位
switch(ui->dataBitCB->currentText().toInt())
{
case 8:serial->setDataBits(QSerialPort::Data8);break;
}
//设置停止位
switch (ui->stopBitCB->currentIndex())
{
case 0:serial->setStopBits(QSerialPort::OneStop);break;
case 1:serial->setStopBits(QSerialPort::OneAndHalfStop);break;
case 2:serial->setStopBits(QSerialPort::TwoStop);break;
}
//设置奇偶校验位
switch(ui->checkBitCB->currentIndex())
{
case 0:serial->setParity(QSerialPort::NoParity);break;//无校验
case 1:serial->setParity(QSerialPort::OddParity);break;//奇校验
case 2:serial->setParity(QSerialPort::EvenParity);break;//偶校验
}
//设置流控制
serial->setFlowControl(QSerialPort::NoFlowControl);
//打开串口
if(!serial->open(QIODevice::ReadWrite))
{
QMessageBox::about(NULL,"提示","无法打开串口");
return;
}
ui->openSerialBut->setText(tr("关闭串口"));
}
else
{
serial->close();//关闭串口
ui->openSerialBut->setText(tr("打开串口"));
}
}
void Widget::serialPort_readyRead() //串口接收
{
QByteArray lasttext;
lasttext=ui->receivePlainTextEdit->toPlainText().toUtf8();
QByteArray receiveText = serial->readAll();
lasttext=lasttext.append(receiveText);
ui->receivePlainTextEdit->setPlainText(lasttext);
}
void Widget::on_sendBut_clicked()
{
QByteArray Sendtext=ui->sendTextEdit->toPlainText().toUtf8();
serial->write(Sendtext);
}
void Widget::on_clearSendBut_clicked()
{
ui->sendTextEdit->clear();
}
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QtSerialPort>
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_openSerialBut_clicked(); //打开串口槽函数
void serialPort_readyRead(); //串口接收槽函数
void on_sendBut_clicked();
void on_clearSendBut_clicked();
private:
Ui::Widget *ui; //串口端口
QSerialPort *serial; //串口端口
};
#endif // WIDGET_H
三、实操
本工程只是实现了最基本的串口接收和发送功能,界面和代码都需要很大的改进
四、注意事项
如果出现串口头文件找不到的情况,那么需要更新一下组件