串口工具

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

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

SSCOM串口调试工具免费下载

ui 设计

在这里插入图片描述

在 .pro中添加

QT       += serialport

如果报错:error: Project ERROR: Unknown module(s) in QT: serialport

可能是未添加serialport组件

解决方法:点击“工具栏” 里“QT Maintenance Tool” “start Maintenance Tool”

勾选对应版本的serial port 进行添加,如果没有,可以重新配置一个构建套件。

功能设计

  • serialPort.pro
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
#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
#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
#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[]){
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

ico 图标

自己选择一张图片,通过在线ICO图标生成器(https://webfem.com/tools/ico/),生成一份ico图标文件,并将其与源文件置于同一个目录,在 .pro文件中添加如下命令,重新运行即可为生成的文件添加一个图标。

# 检查是不是真的.ico文件,偷懒直接改后缀名的文件是不行的
RC_ICONS += serial.ico

项目代码

serialPort 串口调试助手项目代码

封包

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

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

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

进入后输入如下内容

cd /d serialPort.exe所在目录
windeployqt SerialPort.exe // 封包

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

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐