当前位置: 首页 > news >正文

QT中串口打开按钮如何点击打开后又能点击关闭

前言:

if (!portOpen)

{ // 打开串口

if (!sp18Controller->initializePort("COM5", 38400))

{ QMessageBox::critical(this, "Error", "Failed to open serial port.");

return; }

ui->btnOpenPort_2->setText("Close Port");

portOpen = true; }修改为再点击一下关闭串口

以下是修改后的串口开关逻辑代码,实现点击按钮切换开关状态:

cpp

复制

void MainWindow::on_btnOpenPort_2_clicked()
{if (!portOpen) {// 打开串口if (!sp18Controller->initializePort("COM5", 38400)) {QMessageBox::critical(this, "错误", "串口打开失败");return;}ui->btnOpenPort_2->setText("关闭串口");portOpen = true;} else {// 关闭串口sp18Controller->closePort();  // 需要确保Sp18Controller有closePort方法ui->btnOpenPort_2->setText("打开串口");portOpen = false;}
}

需要在Sp18Controller类中添加关闭串口的方法:

cpp

复制

// 在sp18controller.h中添加
public:void closePort();// 在sp18controller.cpp中实现
void Sp18Controller::closePort()
{if(serialPort->isOpen()) {serialPort->close();qDebug() << "串口已关闭";}
}

代码说明:

  1. 状态切换逻辑

    • portOpen为false时尝试打开串口

    • portOpen为true时执行关闭操作

  2. 界面反馈

    • 按钮文本在"打开串口"和"关闭串口"之间切换

    • 关闭操作无需确认直接执行

  3. 错误处理

    • 打开失败时显示错误对话框

    • 关闭操作默认成功(实际可添加关闭失败处理)

扩展建议

  1. 添加关闭状态反馈

cpp

复制

void Sp18Controller::closePort()
{if(serialPort->isOpen()){serialPort->close();emit portStatusChanged(false);  // 新增信号}
}
  1. 异常关闭处理

cpp

复制

void Sp18Controller::closePort()
{try {if(serialPort->isOpen()){serialPort->close();if(serialPort->error() != QSerialPort::NoError) {throw std::runtime_error("关闭异常");}}} catch (const std::exception& e) {qDebug() << "关闭错误:" << e.what();}
}
  1. 按钮状态可视化

cpp

复制

// 在qss中添加样式
QPushButton[text="打开串口"] { background: green; }
QPushButton[text="关闭串口"] { background: red; }

最终效果:点击按钮可在"打开串口"和"关闭串口"状态间切换,按钮颜色自动变化,实时反映串口连接状态。

相关文章:

QT中串口打开按钮如何点击打开后又能点击关闭

前言&#xff1a; if (!portOpen) { // 打开串口 if (!sp18Controller->initializePort("COM5", 38400)) { QMessageBox::critical(this, "Error", "Failed to open serial port."); return; } ui->btnOpenPort_2->setText("Close…...

【AI深度学习基础】PyTorch初探

引言 PyTorch 是由 Facebook 开源的深度学习框架&#xff0c;专门针对 GPU 加速的深度神经网络编程&#xff0c;它的核心概念包括张量&#xff08;Tensor&#xff09;、计算图和自动求导机制。PyTorch作为Facebook开源的深度学习框架&#xff0c;凭借其动态计算图和直观的API设…...

springboot011基于springboot的课程作业管理系统(源码+包运行+LW+技术指导)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得难了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等&#xff0c;你想解决的问题&#xff0c;今天…...

快速从C过度C++(一):namespace,C++的输入和输出,缺省参数,函数重载

&#x1f4dd;前言&#xff1a; 本文章适合有一定C语言编程基础的读者浏览&#xff0c;主要介绍从C语言到C过度&#xff0c;我们首先要掌握的一些基础知识&#xff0c;以便于我们快速进入C的学习&#xff0c;为后面的学习打下基础。 这篇文章的主要内容有&#xff1a; 1&#x…...

PostgreSQL时间计算大全:从时间差到时区转换(保姆级教程)

一、时间计算的三大核心场景 当你遇到这些需求时&#xff0c;本文就是你的救星&#x1f31f;&#xff1a; 倒计时功能&#xff1a;计算活动剩余天数 用户行为分析&#xff1a;统计操作间隔时间 跨国系统&#xff1a;多时区时间统一管理 报表生成&#xff1a;自动计算同比/环…...

laravel es 相关代码 ElasticSearch

来源&#xff1a; github <?phpnamespace App\Http\Controllers;use Elastic\Elasticsearch\ClientBuilder; use Illuminate\Support\Facades\DB;class ElasticSearch extends Controller {public $client null;public function __construct(){$this->client ClientB…...

题目 3220 ⭐因数计数⭐【数理基础】蓝桥杯2024年第十五届省赛

小蓝随手写出了含有 n n n 个正整数的数组 a 1 , a 2 , ⋅ ⋅ ⋅ , a n {a_1, a_2, , a_n} a1​,a2​,⋅⋅⋅,an​ &#xff0c;他发现可以轻松地算出有多少个有序二元组 ( i , j ) (i, j) (i,j) 满足 a j a_j aj​ 是 a i a_i ai​ 的一个因数。因此他定义一个整数对 …...

【Java代码审计 | 第十一篇】SSRF漏洞成因及防范

未经许可&#xff0c;不得转载。 文章目录 SSRF漏洞成因Java中发送HTTP请求的函数1、HttpURLConnection2、HttpClient&#xff08;Java 11&#xff09;3、第三方库Request库漏洞示例OkHttpClient漏洞示例HttpClients漏洞示例 漏洞代码示例防范标准代码 SSRF SSRF&#xff08;S…...

RabbitMQ高级特性--消息确认机制

目录 一、消息确认 1.消息确认机制 2.手动确认方法 二、代码示例 1. AcknowledgeMode.NONE 1.1 配置文件 1.2 生产者 1.3 消费者 1.4 运行程序 2.AcknowledgeMode.AUTO 3.AcknowledgeMode.MANUAL 一、消息确认 1.消息确认机制 生产者发送消息之后&#xff0c;到达消…...

C++复试笔记(一)

Setw 是C中用于设置输出字段宽度的函数。当使用 setw(3) 时&#xff0c;它会设置紧接着的输出字段的最小宽度为3个字符。如果字段内容长度小于3&#xff0c;则会在左侧填充空格以达到指定宽度&#xff1b;如果内容长度大于或等于3&#xff0c;则全部内容将被输出&#xff0c;…...

K8s 1.27.1 实战系列(四)验证集群及应用部署测试

一、验证集群可用性 1、检查节点 kubectl get nodes ------------------------------------------------------ NAME STATUS ROLES AGE VERSION k8s-master Ready control-plane 3h48m v1.27.1 k8s-node1 Ready <none> …...

基于Spring Boot的健美操评分管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

H5页面在移动端自动横屏

首先需要再head标签添加这样一段代码 <meta name="viewport" content="width=device-width,height=device-width,initial-scale=1.0,user-scalable=no">因为需求是为了满足WEB端和手机端都可以查看整体效果 但由于UI没有设计移动端的样式 所以我想说…...

【从0到1搞懂大模型】神经网络的实现:数据策略、模型调优与评估体系(3)

一、数据集的划分 &#xff08;1&#xff09;按一定比例划分为训练集和测试集 我们通常取8-2、7-3、6-4、5-5比例切分&#xff0c;直接将数据随机划分为训练集和测试集&#xff0c;然后使用训练集来生成模型&#xff0c;再用测试集来测试模型的正确率和误差&#xff0c;以验证…...

从0到1入门RabbitMQ

一、同步调用 优势&#xff1a;时效性强&#xff0c;等待到结果后才返回 缺点&#xff1a; 拓展性差性能下降级联失败问题 二、异步调用 优势&#xff1a; 耦合度低&#xff0c;拓展性强异步调用&#xff0c;无需等待&#xff0c;性能好故障隔离&#xff0c;下游服务故障不影响…...

MySQL数据库复杂的增删改查操作

在前面的文章中&#xff0c;我们主要学习了数据库的基础知识以及基本的增删改查的操作。接下去将以一个比较实际的公司数据库为例子&#xff0c;进行讲解一些较为复杂且现时需求的例子。 基础知识&#xff1a; 一文清晰梳理Mysql 数据库基础知识_字段变动如何梳理清楚-CSDN博…...

点云软件VeloView开发环境搭建与编译

官方编译说明 LidarView / LidarView-Superbuild GitLab 我的编译过程&#xff1a; 安装vs2019&#xff0c;windows sdk&#xff0c;qt5.14.2&#xff08;没安装到5.15.7&#xff09;&#xff0c;git&#xff0c;cmake3.31&#xff0c;python3.7.9&#xff0c;ninja下载放到…...

本地YARN集群部署

请先完成HDFS的前置部署&#xff0c;部署方式可查看:本地部署HDFS集群https://blog.csdn.net/m0_73641796/article/details/145998092?spm1001.2014.3001.5502 部署说明 组件配置文件启动进程备注Hadoop HDFS需修改 需启动: NameNode作为主节点 DataNode作为从节点 Secondary…...

STM32常见外设的驱动示例和代码解析

以下是针对STM32常见外设的驱动示例和代码解析,基于HAL库实现,适用于大多数STM32系列(如F1/F4/H7等),可根据具体型号调整引脚和时钟配置。 1. GPIO驱动 应用场景:控制LED、按键检测、继电器开关等。 示例代码: // 初始化LED(推挽输出) void LED_Init(void) {GPIO_In…...

使用数据库和缓存的时候,是如何解决数据不一致的问题的?

1.缓存更新策略 1.1. 缓存旁路模式&#xff08;Cache Aside&#xff09; 在应用里负责管理缓存&#xff0c;读取时先查缓存&#xff0c;如果命中了则返回缓存&#xff0c;如果未命中就查询数据库&#xff0c;然后返回缓存&#xff0c;返回缓存的同时把数据给写入缓存中。更新…...

Qwen3-TTS-12Hz-1.7B-VoiceDesign效果展示:同一instruct跨语言声线迁移能力验证

Qwen3-TTS-12Hz-1.7B-VoiceDesign效果展示&#xff1a;同一instruct跨语言声线迁移能力验证 你有没有想过&#xff0c;同一个声音描述&#xff0c;比如“温柔的成年女性声音”&#xff0c;用中文说出来是一种感觉&#xff0c;用英文、日文说出来&#xff0c;会不会还是同一种感…...

在国产麒麟V10系统上,用kubeadm一步步搭建3个master节点的k8s高可用集群(含haproxy+keepalived配置)

国产麒麟V10系统上构建高可用Kubernetes集群实战指南 在信息技术自主可控的大背景下&#xff0c;国产操作系统正逐步成为企业级基础设施的重要选择。本文将详细介绍如何在麒麟V10&#xff08;Kylin V10&#xff09;操作系统上&#xff0c;从零开始搭建一个包含3个Master节点的高…...

OpenSSL实战:手把手教你创建自签名根证书

1. 为什么需要自签名根证书&#xff1f; 想象一下你正在搭建一个内部测试环境&#xff0c;或者为公司的内部系统建立一套专属的安全通信机制。这时候你会发现&#xff0c;所有涉及HTTPS的环节都需要SSL/TLS证书。如果直接购买商业CA颁发的证书&#xff0c;不仅成本高&#xff…...

16-Kotlin高阶特性-Lambda详解

Kotlin Lambda 表达式完全指南Lambda 表达式是 Kotlin 函数式编程的核心特性之一&#xff0c;它让代码更简洁、表达力更强。无论是集合操作、协程、还是 Jetpack Compose 中的 UI 回调&#xff0c;都大量使用 lambda。本文将系统讲解 Kotlin lambda 的语法形式、含义、各种语法…...

避坑指南:rviz多点导航插件编译失败?可能是你的ROS版本或消息类型不匹配

避坑指南&#xff1a;rviz多点导航插件编译失败&#xff1f;可能是你的ROS版本或消息类型不匹配 当你满怀期待地从GitHub克隆了一个功能强大的rviz多点导航插件&#xff0c;准备为自己的机器人系统增添顺序导航能力时&#xff0c;却遭遇了令人沮丧的编译错误——这种经历对于RO…...

Simula:革命性Linux VR桌面窗口管理器完全指南

Simula&#xff1a;革命性Linux VR桌面窗口管理器完全指南 【免费下载链接】Simula Linux VR Desktop 项目地址: https://gitcode.com/gh_mirrors/si/Simula Simula是一款专为Linux系统打造的革命性VR桌面窗口管理器&#xff0c;它将传统的桌面操作体验带入虚拟现实空间…...

从规格书到点亮屏幕:RK3568+GM8775C双通道LVDS调试全流程解析

RK3568GM8775C双通道LVDS屏幕调试实战&#xff1a;从参数解析到设备树配置 第一次拿到一块非标准LVDS屏幕时&#xff0c;我盯着规格书里密密麻麻的表格和数据完全无从下手。作为硬件工程师&#xff0c;我们常常需要面对各种定制化显示屏的驱动问题。本文将带你深入理解如何从屏…...

如何突破信息壁垒?Bypass Paywalls Clean让优质内容触手可及

如何突破信息壁垒&#xff1f;Bypass Paywalls Clean让优质内容触手可及 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的数字时代&#xff0c;学术论文、深度报道和专业分…...

小白友好!MedGemma X-Ray完整使用流程:上传、提问、获取报告

小白友好&#xff01;MedGemma X-Ray完整使用流程&#xff1a;上传、提问、获取报告 你是不是也遇到过这样的情况&#xff1f;拿到一张胸部X光片&#xff0c;看着上面复杂的骨骼、肺纹理和阴影&#xff0c;感觉无从下手&#xff0c;不知道哪些是正常的&#xff0c;哪些是需要关…...

DeepSeek API实战:如何用Python脚本绕过Postman直接调用(附完整代码)

DeepSeek API高效调用指南&#xff1a;Python脚本开发实战 在当今快节奏的开发环境中&#xff0c;效率是衡量开发者生产力的关键指标。传统API测试工具如Postman虽然功能强大&#xff0c;但在自动化流程和持续集成场景中往往显得笨重。本文将带你探索一种更轻量、更灵活的解决方…...