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);  // 设置字体大小为20ui->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_OBJECTpublic:// 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)
在这里插入图片描述
效果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/625583.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 中 map 的实用操作指南

在 C 中&#xff0c;map 是一种基于键值对的容器&#xff0c;其中的数据总是以成对形式出现。如所示&#xff0c;每一对中的第一个元素是关键字&#xff08;key&#xff09;&#xff0c;这些关键字在 map 中具有唯一性&#xff0c;即每个关键字只能出现一次&#xff1b;第二个元…

深度强化学习(DRL)算法 附录 6 —— NLP 回顾之预训练模型篇

Self-Attention 模型结构 上图架构以 batch_size 为 1&#xff0c;两个时间步的 X 为例子&#xff0c;计算过程如下&#xff1a; 位置编码 根据 self-attention 的模型结构&#xff0c;改变 X 的输入顺序&#xff0c;不影响 attention 的结果&#xff0c;所以还需要引入额外的…

【教程】一个比较良心的C++代码混淆器

这是一个比较良心的C代码混淆器&#xff0c;用于信息竞赛训练和保护代码免受抄袭。本文将介绍这个混淆器的使用方法、混淆效果和已知的一些bug。同时&#xff0c;我们也会给出一些示例来演示混淆器的具体操作。 引言 在信息竞赛训练和实际开发中&#xff0c;保护代码的安全性和…

淘宝API商品详情数据在数据分析行业中具有不可忽视的重要性

淘宝商品详情数据在数据分析行业中具有不可忽视的重要性。这些数据为商家、市场分析师以及数据科学家提供了丰富的信息&#xff0c;有助于他们更深入地理解市场动态、消费者行为以及商品竞争态势。以下是淘宝商品详情数据在数据分析行业中的重要性体现&#xff1a; 请求示例&a…

Python实现exe小工具

1、实例代码 import tkinter as tk from tkinter import messagebox from tkinter import ttk import requestsdef submit():input_text entry.get()if len(input_text) 0:messagebox.showinfo("提示", "请输入您所要提问的问题&#xff01;")returnsel…

cesium加载倾斜影像数据(模拟雨、雪、雾、无人机飞行、测距、箭头标绘、电子围栏等)

实现效果如下&#xff1a; 功能菜单如下&#xff1a; 加载倾斜影像核心代码&#xff1a; var palaceTileset new Cesium.Cesium3DTileset({url: http://127.0.0.1:9002/tileset.json,//控制切片视角显示的数量&#xff0c;可调整性能maximumScreenSpaceError: 0.1,maximumNum…

C++ | Leetcode C++题解之第31题下一个排列

题目&#xff1a; 题解&#xff1a; class Solution { public:void nextPermutation(vector<int>& nums) {int i nums.size() - 2;while (i > 0 && nums[i] > nums[i 1]) {i--;}if (i > 0) {int j nums.size() - 1;while (j > 0 && …

HA-Maleimide-HA马来酰亚胺修饰透明质酸 水凝胶递送药物

HA-Maleimide-HA马来酰亚胺修饰透明质酸 水凝胶递送药物 【中文名称】马来酰亚胺修饰透明质酸 【英文名称】HA-Maleimide 【分 子 量】3k/5k/7k/10k/50k/100k/200k/300k/500k/1000k...... 【结 构 式】 【品 牌】碳水科技&#xff08;Tanshtech&#xff09; 【纯 度…

闲不住,手写一个数据库文档生成工具

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 个人IP&#xff1a;shigen 逛博客的时候&#xff0c;发现了一个很有意思的文章&#xff1a;数据库表结构导…

【二分查找】Leetcode 74. 搜索二维矩阵【中等】

搜索二维矩阵 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&#xff0c…

面试:sleep 和 wait

一、共同点 wait(),wait(long)和sleep(long)的效果都是让当前线程暂时放弃CPU的使用权&#xff0c;进入阻塞状态 二、不同点 1、方法归属不同 sleep(long)是Thread的静态方法而wait(), wait(long)都是Object的成员方法&#xff0c;每个对象都有 2、醒来的时机不同 执行sleep(l…

Linux —— 进程控制

一、进程创建 —— fork 1.fork fork&#xff1a;在调用时&#xff0c;创建子进程&#xff0c;父进程返回子进程pid&#xff0c;子进程返回0&#xff0c;出错返回-1 头文件&#xff1a;#include<unistd.h> 2.fork函数被调用时&#xff0c;CPU做了什么&#xff1f; a…