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 即可执行程序。

相关推荐
沫璃染墨5 小时前
《Qt从零入门系列(一):Qt框架初识——从发展历史到跨平台开发》
c++·qt·系统架构·gui
郝学胜-神的一滴1 天前
Qt 高级编程 040:按钮悬浮弹出滑块弹窗的完整攻略
开发语言·c++·qt·软件工程·用户界面
我是小灰灰吖1 天前
Ubuntu 22.04 安装 SSH 服务与远程调试环境配置指南
qt·ubuntu·ssh
雨田言炎1 天前
四、关于Qt项目需要知道的
开发语言·笔记·qt
必须得开心呀1 天前
qt生成dump文件并定位异常
开发语言·qt
Quz2 天前
QML ProgressBar 自定义样式:自绘组件、Material风格
qt
Quz2 天前
QML 环形进度条:Canvas 绘制与多环进度
qt
我是小灰灰吖2 天前
Qt崩溃捕获实战:qBreakpad从源码编译到崩溃分析全流程指南
linux·qt·ubuntu
熬夜苦读学习2 天前
Qt--网络编程
开发语言·qt
上海安当技术2 天前
C/S 桌面软件怎么接 UKey 强认证?C# SDK 与 C 动态库集成 WinForms/Qt/工控实战
c语言·qt·c#