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.rhkb.cn/news/311757.html

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

相关文章

【Image captioning】论文阅读九—Self-Distillation for Few-Shot Image Captioning_2022

摘要 大规模图像字幕数据集的开发成本高昂,而大量未配对的图像和文本语料库可能有助于减少手动注释的工作。在本文中,我们研究了只需要少量带注释的图像标题对的少样本图像标题问题。我们提出了一种基于集成的自蒸馏方法,允许使用不成对的图像和字幕来训练图像字幕模型。该…

【HCIP】OSPF的高级特性

OSPF的高级特性1 --- 不规则区域 一、OSPF不规则区域类型 产生原因&#xff1a;区域划分不合理&#xff0c;导致的问题 1、非骨干区域无法和骨干区域保持连通 2、骨干区域被分割 造成后果&#xff1a;非骨干区域没和骨干区域相连&#xff0c;导致ABR将不会帮忙转发区域间的路由…

使用 code-server 搭建在线的 VS Code 编辑器

文章目录 前言安装体验后记 前言 VS Code 是一个非常流行的代码编辑器&#xff0c;安装各种拓展下也可以当作全功能的IDE使用。VS Code本身是基于Web方案构建的&#xff0c;完全可以搭建服务器&#xff0c;然后通过浏览器访问。事实上官方就是这么设计的。现在打开任何一个Git…

mp3转m4a怎么转?4种方法无损转换音频~

M4A文件格式&#xff0c;或称MPEG-4 Audio&#xff0c;崭露头角于音频时代。其诞生旨在提供更高保真度和更高效的音频压缩&#xff0c;为多媒体应用和苹果设备赋能。 M4A格式与MP3格式的优缺点对比 M4A与MP4格式密不可分&#xff0c;均属于MPEG-4标准。相较MP3&#xff0c;M4A…

“中医显示器”是人体健康监测器

随着科技的进步&#xff0c;现代医学设备已经深入到了人们的日常生活中。然而&#xff0c;在这个过程中&#xff0c;我们不应忘记我们的医学根源&#xff0c;中医。我们将中医的望、闻、问、切四诊与现代科技相结合&#xff0c;通过一系列的传感器和算法将人体的生理状态以数字…

通过Maven导入本地jar包

1.创建lib文件夹&#xff0c;把jar包放到文件夹里面 2.在pom里导入依赖 导入完成

滤波器笔记(杂乱)

线性相位是时间平移&#xff0c;相位不失真 零、基础知识 1、用相量表示正弦量 https://zhuanlan.zhihu.com/p/345546880 https://www.zhihu.com/question/347763932/answer/1103938667 A s i n ( ω t θ ) ⇔ A e j θ ⇔ A ∠ θ Asin(\omega t\theta) {\Leftrightarrow…

VMware 虚拟机中的 Ubuntu 16.04 设置 USB 连接

VMware 虚拟机中的 Ubuntu 16.04 设置 USB 连接 1. VMware USB Arbitration Service2. 可移动设备 USB 口连接主机3. 虚拟机 -> 可移动设备 -> 连接 (断开与主机的连接)4. 状态栏 -> 断开连接 (连接主机)References 1. VMware USB Arbitration Service 计算机 -> …

lv_micropython for ESP32-S2/S3/C3

一、更新文件 lv_binding_micropython:GitHub - kdschlosser/lv_binding_micropython at esp32-s-c-h_support 下载lv_binding_micropython分支&#xff1a; git clone -b esp32-s-c-h_support https://github.com/kdschlosser/lv_binding_micropython.git 替换文件&#x…

NodeJS特点

NodeJS特点 web服务器的主要特点是&#xff1a;事件驱动&#xff0c;非阻塞I/O&#xff0c;单线程&#xff0c;跨平台自身非常简单&#xff0c;通过通信协议来组织许多node&#xff0c;通过拓展来达成构建大型网络应用的目的。每一个node进程都构成这个网络的一个节点适用于io…

4个步骤:如何使用 SwiftSoup 和爬虫代理获取网站视频

摘要/导言 在本文中&#xff0c;我们将探讨如何使用 SwiftSoup 库和爬虫代理技术来获取网站上的视频资源。我们将介绍一种简洁、可靠的方法&#xff0c;以及实现这一目标所需的步骤。 背景/引言 随着互联网的迅速发展&#xff0c;爬虫技术在今天的数字世界中扮演着越来越重要…

海外云手机为什么适合社媒运营?

如今&#xff0c;社媒营销如果做得好&#xff0c;引流效果好的账号&#xff0c;可以用来带货变现&#xff0c;而外贸、品牌出海也同样都在做社媒营销&#xff0c;Tik Tok、facebook、ins等热门的海外社媒平台都是行业密切关注的&#xff0c;必要的时候&#xff0c;大家会使用海…

Redis从入门到精通(十九)多级缓存(四)Nginx共享字典实现本地缓存

文章目录 前言6.5 实现多级缓存6.5.6 Nginx本地缓存6.5.6.1 代码实现6.5.6.2 功能测试 6.6 缓存同步6.6.1 缓存同步策略6.6.2 异步通知策略 前言 Redis多级缓存系列文章&#xff1a; Redis从入门到精通(十六)多级缓存(一)Caffeine、JVM进程缓存 Redis从入门到精通(十七)多级缓…

05节-51单片机-模块化编程

1.两种编程方式的对比 传统方式编程&#xff1a; 所有的函数均放在main.c里&#xff0c;若使用的模块比较多&#xff0c;则一个文件内会有很多的代码&#xff0c;不利于代码的组织和管理&#xff0c;而且很影响编程者的思路 模块化编程&#xff1a; 把各个模块的代码放在不同的…

数字革命的先锋:Web3对社会的影响

引言 在信息技术飞速发展的当下&#xff0c;Web3作为一个新兴的互联网模式&#xff0c;正在逐渐改变我们的生活方式、商业模式和社会结构。本文将深入探讨Web3的核心特点、它在各个领域中的应用以及对社会产生的深远影响。 1. Web3的核心特点 1.1 去中心化 Web3强调去中心化…

Day 27 39. 组合总和 40.组合总和II 131.分割回文串

组合总和 给定一个无重复元素的数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明&#xff1a; 所有数字&#xff08;包括 target&#xff09;都是正整数。解集不能…

stm32实现hid键盘

前面的cubelmx项目配置参考 stm32实现hid鼠标-CSDN博客https://blog.csdn.net/anlog/article/details/137814494?spm1001.2014.3001.5502两个项目的配置完全相同。 代码 引用 键盘代码&#xff1a; 替换hid设备描述符 先屏蔽鼠标设备描述符 替换为键盘设备描述符 修改宏定…

Shell循环以及条件语句使用

Shell脚本基础已经发过&#xff0c;可在主页查找&#xff0c;现在讲解case&#xff0c;for&#xff0c;while语句&#xff0c;以及语句的练习。 1.case语句 等同于C语⾔的switch-case 格式&#xff1a; case $变量 in # 判断变量的值 a) # 值是什么语句;; # 相当于break 但…

机器学习和深度学习的区别

机器学习与深度学习的区别 一、原理差异二、应用差异三、实现方式差异四、在实际应用中扮演的角色1、图像识别和计算机视觉2、自然语言处理NLP3、语音识别领域4、其它—智能制造/医疗健康/金融/教育 五、总结 在人工智能领域&#xff0c;机器学习和深度学习是两个重要的概念&am…

『FPGA通信接口』串行通信接口-SPI

文章目录 1.SPI简介2.控制时序3.Dual、Qual模式4.例程设计与代码解读5.SPI接口实战应用5.1时序要求5.2仿真时序图5.3代码设计 6.传送门 1.SPI简介 SPI是串行外设接口&#xff08;Serial Peripheral Interface&#xff09;的缩写&#xff0c;通常说SPI接口或SPI协议都是指SPI这…