Qt-03:串口助手

文章目录

串口工具

【工具】SSCOM V5.13.1串口工具-基础使用(图文详情)

https://blog.csdn.net/qq_41539778/article/details/135965840

SSCOM串口调试工具免费下载

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();
}

项目代码

serialPort 串口调试助手项目代码

封包

需要将程序生成一个可以执行文件:

在桌面主页,点击win图标,搜索:qt

找到 Qt 的控制页面,如:Qt 6.5.3 (MinGW 11.2.0 64-bit)

进入后输入如下内容

c 复制代码
cd /d serialPort.exe所在目录
windeployqt SerialPort.exe // 封包

完成打包,点击 SerialPort.exe 即可执行程序。

相关推荐
皓悦编程记20 小时前
【YOLO26 系列】基于YOLO26的垃圾分类检测系统【python源码+Pyqt5界面/WEB+数据集+训练代码】
python·qt·分类
十五年专注C++开发1 天前
qobject_cast转换失败原因分析
c++·qt·dynamic_cast·qobject_cast
sycmancia1 天前
Qt——线程的生命期问题
开发语言·qt
闻道且行之2 天前
TurboOCR:基于PP-OCRv6的极速Windows离线OCR工具,深度解析3.4GB依赖背后的技术架构
c++·人工智能·python·qt·机器学习·ocr
气概2 天前
QT集成basler相机
开发语言·数码相机·qt
GIS阵地3 天前
QgsRasterDataProvider 完整详解(QGIS 3.40.13 C++)
开发语言·c++·qt·开源软件·qgis
sycmancia3 天前
Qt——多线程中的信号与槽(二)
jvm·qt
Quz4 天前
QML Label 完整用法与 Text 组件选型
前端·qt
kaixin_learn_qt_ing4 天前
QPluginLoader
qt
kaixin_learn_qt_ing4 天前
Qt 提升部件(Promote)找不到头文件路径
qt