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

相关推荐
864记忆5 小时前
远程执行指令-常用指令集
qt
郝学胜_神的一滴6 小时前
Qt 高级开发 026:QTabWidget御道,从筑基到化境
c++·qt
走好每一步7 小时前
2、VDK 使用QVTKOpenGLNativeWidget嵌入到QT窗体中
qt·vtk·三维图像
nnnnichijou8 小时前
Qt 6.9 嵌入式 Linux 交叉编译全栈填坑指南(以树莓派5 AArch64 为例
qt·嵌入式·交叉编译·qml·树莓派5
864记忆10 小时前
OD车牌号获取流程
qt
满天星830357712 小时前
【Qt】信号和槽 (一)(概述和基本使用)
开发语言·c++·qt
郝学胜_神的一滴14 小时前
Qt 高级开发 027: QTabWidget自定义样式表美化实战
c++·qt
Apibro15 小时前
【Linux】Qt Creator 中文输入法
linux·qt
Jun62615 小时前
QT(5)-第三方日志系统
开发语言·数据库·qt