自学内容网 自学内容网

QT串口助手

QT应用程序打包教程(超简单):QT如何打包生成独立可执行.exe文件

.cpp文件:

// 这里包含所需要的头文件mainwindow.h和ui_mainwindow.h以及Qt提供的QMessageBox和QTextStream类
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QTextStream>

// 以下是MainWindow构造函数,构造函数在一个对象被创建时被调用
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)  // 创建一个用户界面类的实例
{
    ui->setupUi(this);  // 通过调用setupUi方法来设置初始界面
    serial = new QSerialPort;  // 创建一个新的QSerialPort实例进行串口通信
    setWindowTitle("简易串口助手");  // 设置应用程序窗口的标题
    QFont font;  // 创建一个QFont对象,用于设置字体
    font.setPointSize(20);  // 设置字体大小为20
    ui->recvEdit->setFont(font); // 修改接收文本框的字体大小
    ui->sendEdit->setFont(font);  // 修改发送文本框的字体大小
}

// ~MainWindow() 是一个析构函数,用于在窗口关闭或应用程序结束时清理并释放资源
MainWindow::~MainWindow()
{
    delete ui;// 释放 ui 对象所占用内存的语句
}

// 处理用户从下拉菜单(ComboBox)中选择的串口配置,并将这些配置应用到串口对象上
void MainWindow::on_SerailCb_activated(const QString &arg1)
{
    // 当用户选择一个项时,就将选中项的文本作为arg1参数传入,调用方法设置串口名
    serial->setPortName(arg1);
}

void MainWindow::on_baundrateCb_activated(const QString &arg1)
{
    // 把选中项文本转化为整数用于设置波特率
    serial->setBaudRate(arg1.toInt());
}

void MainWindow::on_databitCb_activated(const QString &arg1)
{
    // 把选中项文本转化为整数用于设置数据位
    serial->setDataBits((QSerialPort::DataBits)arg1.toInt());
}

void MainWindow::on_CheckbitCb_activated(const QString &arg1)
{
    // 把选中项的索引用于设置校验位
    serial->setParity((QSerialPort::Parity)ui->CheckbitCb->currentIndex());
}

void MainWindow::on_stopbitCb_2_activated(const QString &arg1)
{
    // 把选中项文本转化为整数用于设置停止位
    serial->setStopBits((QSerialPort::StopBits)arg1.toInt());
}

// 按钮被点击时的槽函数
void MainWindow::on_openBt_clicked()
{
    // 检查串口是否已经被打开
    if(ui->openBt->text()=="打开串口")  // 当未打开串口时
    {
        if(serial->open(QIODevice::ReadWrite)) // 尝试以读写方式打开串口
        {
            // 如果成功打开,按钮的文本变更为"关闭串口"
            ui->openBt->setText("关闭串口");
             // 连接串口的readyRead信号到匿名槽函数,意为当串口收到数据时对其进行读取并显示
            connect(serial, &QSerialPort::readyRead, this, [&]()
            {
                // 读取串口收到的所有数据
                QByteArray info = serial->readAll();
                 // 在接收文本框中显示收到的信息,setPlainText会把当前文本框中的内容替换,而不是追加
                ui->recvEdit->setPlainText(QString(info));
            });
        }
        else
        {
            // 如果打开串口失败,弹出错误对话框显示错误信息
            QMessageBox::critical(this, tr("错误"), serial->errorString());
        }
    }
    else // 如果已经被打开,就关闭串口,并将按钮的文本改回"打开串口"
    {
        serial->close();
        ui->openBt->setText("打开串口");
    }
}

// 发送按钮被点击时调用
void MainWindow::on_sendBt_clicked()
{
    QString data = ui->sendEdit->toPlainText(); // 从文本框中获取数据
    serial->write(data.toLocal8Bit());  // 发送数据
}

void MainWindow::on_recvEdit_blockCountChanged(int newBlockCount)
{

}

void MainWindow::on_sendEdit_copyAvailable(bool b)
{

}

.h文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

// 下面的#include指令包含了一些头文件,这里的头文件都是Qt框架所需要的
#include <QMainWindow>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>

// 这里将Qt命名空间开始和结束的宏包裹了起来,使得我们可以在这个命名空间中定义一些代码
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

// 这是MainWindow这个类的定义开始的地方,这个类继承自QMainWindow,QMainWindow是一个用于创建应用程序主窗口的类
class MainWindow : public QMainWindow
{
    // Q_OBJECT是个宏,它在任何继承自QObject的类中都必须出现,能让这个类使用Qt的元对象系统
    Q_OBJECT

public:
    // MainWindow的构造函数和析构函数,构造函数用于初始化对象,析构函数用于清理对象在生命周期结束时的状态
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    // QSerialPort是一个类,这里在MainWindow类中声明了一个QSerialPort类型的指针serial,用于串口通信
    QSerialPort * serial;

private slots:
    // 这些被定义为槽的函数可以通过Qt的信号槽机制与其他对象进行连接并相应交互
    // 例如,当用户在界面中选择了某个串口,下面的函数就会被调用
    // 冒号后面的const QString &arg1表示这个函数有一个QString类型的常量引用参数
    void on_SerailCb_activated(const QString &arg1);

    // 同样,当用户在界面中选择了波特率、数据位、校验位、停止位时,下面的函数就会被调用
    void on_baundrateCb_activated(const QString &arg1);

    void on_databitCb_activated(const QString &arg1);

    void on_CheckbitCb_activated(const QString &arg1);

    void on_stopbitCb_2_activated(const QString &arg1);

    // 当用户点击了打开/关闭串口或发送数据的按钮时,下面的两个函数就会被调用
    void on_openBt_clicked();

    void on_sendBt_clicked();

    void on_recvEdit_blockCountChanged(int newBlockCount);

    void on_sendEdit_copyAvailable(bool b);

private:
    // 这是一个指向Ui类MainWindow界面的指针,它被封装在MainWindow类中,所有与用户界面有关的改变都在这个指针的对象上操作
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H


.pro文件:

# 包含你项目所需的Qt模块
QT       += core gui  # Qt的基础模块,提供Qt的核心功能和图形用户界面功能

QT       += core gui serialport  # 串口通信功能

# 如果所使用的Qt版本号大于4,那么widgets模块也会被包含进来
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

# 告诉Qt使用C++11标准编译项目
CONFIG += c++11

# 如果你使用了已经被标记为过时的Qt特性,编译器会产生警告
DEFINES += QT_DEPRECATED_WARNINGS

# SOURCES变量包含了需要编译的.cpp源文件
SOURCES += \
    main.cpp \
    mainwindow.cpp

# HEADERS变量包含了所有的头文件
HEADERS += \
    mainwindow.h

# FORMS变量包含了所有的.ui文件,用于描述图形用户界面
FORMS += \
    mainwindow.ui

# 定义了项目文件的部署路径,目前是默认
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target


ui:
端口下拉框(SerailCb),

波特率下拉框(baundrateCb),

数据位下拉框(databitCb),

停止位下拉框(stopbitCb),

校验位(CheckbitCb),

打开串口按钮(openBt),

接收区域(recvEdit),

发送输入区域(sendEdit),

发送按钮(sendBt)
在这里插入图片描述
效果:
在这里插入图片描述


原文地址:https://blog.csdn.net/qq_19605587/article/details/137825695

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!