文章目录
串口工具
【工具】SSCOM V5.13.1串口工具-基础使用(图文详情)
https://blog.csdn.net/qq_41539778/article/details/135965840
ui 设计

在 .pro中添加
cpp
QT += serialport
如果报错:error: Project ERROR: Unknown module(s) in QT: serialport
可能是未添加serialport组件
解决方法:点击"工具栏" 里"QT Maintenance Tool" "start Maintenance Tool"
勾选对应版本的serial port 进行添加,如果没有,可以重新配置一个构建套件。
功能设计
cpp
QT += core gui
QT += serialport
# charts
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++17
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
widget.cpp
HEADERS += \
widget.h
FORMS += \
widget.ui
# 检查.ico文件,直接改后缀名是不行的
RC_ICONS += serial.ico
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
- Widget.h
cpp
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QSerialPortInfo>
#include <QSerialPort>
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_openBt_clicked();
void on_closeBt_clicked();
void on_sendBt_clicked();
void on_clearBt_clicked();
void serialPortReadyRead_Slot();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
- Widget.cpp
cpp
#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
#include <QString>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{
ui->setupUi(this);
// QSerialPort类 提供访问串口的功能,还可以通过QSerialPortInfo类获取可用串口的信息。
// QSerialPortInfo类 允许枚举系统中所有串口的信息,包括串口名称、系统位置、描述和制造商。
// QSerialPortInfo::availablePorts() 返回系统上可用串口的列表。
ui->serialCb->clear(); // 先清空原有下拉项
QStringList serialNamePort; // 串口名字存储列表
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()){
serialNamePort<<info.portName(); // 将串口名字加入列表
}
ui->serialCb->addItems(serialNamePort);
serialPort = new QSerialPort(this);
connect(serialPort, &QSerialPort::readyRead, this, &Widget::serialPortReadyRead_Slot);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_openBt_clicked()
{
QSerialPort::BaudRate baudRate;
QSerialPort::DataBits dataBits;
QSerialPort::StopBits stopBits;
QSerialPort::Parity checkBits;
if(ui->baudRateCb->currentText()=="4800") {
baudRate = QSerialPort::Baud4800;
}else if(ui->baudRateCb->currentText()=="9600") {
baudRate = QSerialPort::Baud9600;
}else if(ui->baudRateCb->currentText()=="115200") {
baudRate = QSerialPort::Baud115200;
}
if(ui->dataCb->currentText()=="5") {
dataBits = QSerialPort::Data5;
}else if(ui->dataCb->currentText()=="6") {
dataBits = QSerialPort::Data6;
}else if(ui->dataCb->currentText()=="7") {
dataBits = QSerialPort::Data7;
}else if(ui->dataCb->currentText()=="8") {
dataBits = QSerialPort::Data8;
}
if(ui->stopCb->currentText()=="1") {
stopBits = QSerialPort::OneStop;
}else if(ui->stopCb->currentText()=="1.5") {
stopBits = QSerialPort::OneAndHalfStop;
}else if(ui->stopCb->currentText()=="2") {
stopBits = QSerialPort::TwoStop;
}
if(ui->checkCb->currentText()=="none") {
checkBits = QSerialPort::NoParity;
}
serialPort->setPortName(ui->serialCb->currentText());
serialPort->setBaudRate(baudRate);
serialPort->setDataBits(dataBits);
serialPort->setStopBits(stopBits);
serialPort->setParity(checkBits);
if(serialPort->open(QIODevice::ReadWrite) == true) {
QMessageBox::information(this, "提示", "成功");
}else {
QMessageBox::critical(this, "提示", "失败");
}
}
void Widget::on_closeBt_clicked(){
serialPort->close();
}
void Widget::on_sendBt_clicked(){
QString str = ui->sendEdit->text();
serialPort->write(str.toLocal8Bit().data());
}
void Widget::on_clearBt_clicked() {
ui->receivedEdit->clear();
}
void Widget::serialPortReadyRead_Slot(){
QByteArray buf = serialPort->readAll();
QString str = QString::fromLocal8Bit(buf);
ui->receivedEdit->appendPlainText(str);
}
- main.cpp
cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[]){
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
项目代码
封包
需要将程序生成一个可以执行文件:
在桌面主页,点击win图标,搜索:qt
找到 Qt 的控制页面,如:Qt 6.5.3 (MinGW 11.2.0 64-bit)
进入后输入如下内容
c
cd /d serialPort.exe所在目录
windeployqt SerialPort.exe // 封包
完成打包,点击 SerialPort.exe 即可执行程序。