从零开始实现自己的串口调试助手(9)-重置多文本框,保存/载入指令集

重置多文本框

添加多文本控件列表


构造函数中把我们需要操作的控件归类到对应列表之中

    //创建多文本存放数组 - 存放那三列内容 checkBox lineEdi btnfor(int i=1;i<=9;i++){// 添加到按钮数组QString btnName = QString("pushButton_t%1").arg(i); //构建对应控件名QPushButton * btn = findChild<QPushButton *>(btnName);//通过控件名查找对应类型对象if(btn){//设置属性去获得我们的文本框序号btn->setProperty("buttonId",i);buttons.append(btn);//为每一个按钮绑定信号与槽connect(btn,SIGNAL(clicked()),this,SLOT(on_command_button_clicked()));}// 添加lineEdit数组QString lineEditName = QString("lineEdit_t%1").arg(i);QLineEdit *lineEdit = findChild<QLineEdit*>(lineEditName);lineEdits.append(lineEdit); //将找到的控件对象添加到我们定义的控件数组中// 添加checkBox数组QString checkBoxName = QString("checkBox_t%1").arg(i);QCheckBox *checkBox = findChild<QCheckBox*>(checkBoxName);checkBoxs.append(checkBox); //将找到的控件对象添加到我们定义的控件数组中}


实现重置槽函数:

//重置多文本列表槽函数
void Widget::on_btnInit_clicked()
{QMessageBox msgBox;msgBox.setWindowTitle("提示");msgBox.setIcon(QMessageBox::Question);msgBox.setText("重置列表不可逆,确认是否重置?");// 设置按钮QPushButton *yesButton = msgBox.addButton("是",QMessageBox::YesRole);QPushButton *noButton = msgBox.addButton("是",QMessageBox::YesRole);//展示QMessageBoxmsgBox.exec();if(msgBox.clickedButton() == yesButton){qDebug()<<"yes";for(int i=0;i<lineEdits.size();++i){//遍历lineEdit 并清空内容lineEdits[i]->clear();//遍历checkBox,并取消勾选checkBoxs[i]->setChecked(false);}}else if(msgBox.clickedButton() == noButton){qDebug()<<"no";}
}

效果演示

1.先添加内容,并且勾选HEX发送

2.点击重置按键,弹出对话框                                              3.选择确定后,多文本框被清空

                               

保存指令集

实现保存槽函数:

void Widget::on_btnSave_clicked()
{QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"),"F:/myqt/file_of_qt/cmds.txt",tr("Text (*.txt)"));QFile file(fileName); // 通过什么获得的文件名来实例化Qfile对象if (!file.open(QIODevice::WriteOnly | QIODevice::Text))return;QTextStream out(&file); //实例化QTextStream对象 -- 准备写入数据for(int i=0;i<lineEdits.size();++i){ // 遍历指令集对应的控件列表out<<checkBoxs[i]->isChecked()<<","<<lineEdits[i]->text()<<"\n";}file.close();
}

实现效果

在指令集存在数据的情况下,点击保存按钮

弹出保存文件框

点击保存,去对应路径下打开

载入指令集

实现载入槽函数

void Widget::on_btnLoad_clicked()
{int i = 0;QString fileName = QFileDialog::getOpenFileName(this, tr("载入文件"),"F:/myqt/file_of_qt/",tr("文本类型 (*.txt)"));if(fileName != NULL){ // if这个文件名的文件存在QFile file(fileName);if (!file.open(QIODevice::ReadOnly | QIODevice::Text))return;QTextStream in(&file); //实例化QTextStream对象 -- 准备写入数据while(!in.atEnd() && i<=9){//读到文末放回1,!1=0 -->结束循环QString line = in.readLine(); //读取一行内容到line中QStringList parts = line.split(','); //以','分割字符串为若干部分,并存入QStringLine中if(parts.count() == 2){ // 得到合法的指令checkBoxs[i]->setChecked(parts[0].toInt());lineEdits[i]->setText(parts[1]);}i++;}}}

效果演示

先看看我们的指令集

选择载入

选择我们的目标指令集 -->载入成功

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

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

相关文章

DSP问题:TMS320F280049延时和实际不符

1、问题现象 我之前写的一篇点灯文章&#xff0c;发现LED等闪烁频率和设想不一致&#xff0c;延时100ms&#xff0c;实际延时要更长。 2、问题原因 电路中使用的晶振是10MHz&#xff0c;实际代码中配置的是20MHz的晶振。 3、解决方案 修改代码中的晶振配置为10MHz即可。…

【Redis】Redis经典问题:缓存穿透、缓存击穿、缓存雪崩

目录 缓存的处理流程缓存穿透解释产生原因解决方案1.针对不存在的数据也进行缓存2.设置合适的缓存过期时间3. 对缓存访问进行限流和降级4. 接口层增加校验5. 布隆过滤器原理优点缺点关于扩容其他使用场景SpringBoot 整合 布隆过滤器 缓存击穿产生原因解决方案1.设置热点数据永不…

【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

力扣hot100:394. 字符串解码(递归)

LeetCode&#xff1a;394. 字符串解码 本题容易想到用递归处理&#xff0c;在写递归时主要是需要明确自己的递归函数的定义。 不过我们也可以利用括号匹配的方式使用栈进行处理。 1、递归 定义递归函数string GetString(string & s,int & i); 表示处理处理整个numbe…

list模拟与实现(附源码)

文章目录 声明list的简单介绍list的简单使用list中sort效率测试list的简单模拟封装迭代器insert模拟erase模拟头插、尾插、头删、尾删模拟自定义类型迭代器遍历const迭代器clear和析构函数拷贝构造&#xff08;传统写法&#xff09;拷贝构造&#xff08;现代写法&#xff09; 源…

Django与MySQL:配置数据库的详细步骤

文章目录 Django-MySQL 配置配置完执行数据迁移&#xff0c;如果报错: Error loading MySQLdb module&#xff0c; Django-MySQL 配置 # settings.pyDATABASES {# 默认配置sqlite3数据库# default: {# ENGINE: django.db.backends.sqlite3,# NAME: BASE_DIR / db.sqli…

Flutter 中的 ListTileTheme 小部件:全面指南

Flutter 中的 ListTileTheme 小部件&#xff1a;全面指南 Flutter 是一个功能强大的 UI 框架&#xff0c;由 Google 开发&#xff0c;允许开发者使用 Dart 语言构建跨平台的移动、Web 和桌面应用。在 Flutter 的 Material 组件库中&#xff0c;ListTile 是一个用于展示列表项的…

[word] word文字间隙怎么调整? #媒体#职场发展

word文字间隙怎么调整&#xff1f; 在文档中的数据包含英文、数字、中文等&#xff0c;会有间隙&#xff0c;有时候误以为是空格&#xff0c;但是根本删除不了&#xff0c;其实这是默认的间隙&#xff0c;是可以调整的&#xff0c;下面教大家word文字间隙怎么调整的操作&#…

c#与汇川plc通信

前言 上位机开发中有时会要求与PLC进行通信。所以这里写了个简单的例子。 在C#中与汇川PLC进行通信&#xff0c;你可以使用S7NetPlus库&#xff0c;这是一个开源的库&#xff0c;专门用于与西门子S7系列PLC进行通信&#xff0c;其中也包括汇川PLC。 1.安装第三方库 需要安装S7…

RabbitMQ python第三方库pika应用入门实践

1. RabbitMQ简介 RabbitMQ是一个可靠、高效的开源消息代理服务器&#xff0c;基于AMQP协议。它具备以下特点&#xff1a; 可以支持多种消息协议&#xff0c;如AMQP、STOMP和MQTT等。提供了持久化、可靠性和灵活的路由等功能。支持消息的发布和订阅模式。具备高可用性和可扩展…

我对Chat-GPT4o的使用感受

ChatGTP4o代表了人工智能领域&#xff0c;特别是自然语言处理技术的重大进步。从埃隆马斯克的中可以看出&#xff0c;它具备以下显著特点和优势&#xff1a; 广泛的知识基础&#xff1a;通过连接大量包含真实世界对话的语料库进行训练&#xff0c;ChatGTP40能够理解和生成跨越…

Java开发-面试题-0004-HashMap 和 Hashtable的区别

Java开发-面试题-0004-HashMap 和 Hashtable的区别 更多内容欢迎关注我&#xff08;持续更新中&#xff0c;欢迎Star✨&#xff09; Github&#xff1a;CodeZeng1998/Java-Developer-Work-Note 技术公众号&#xff1a;CodeZeng1998&#xff08;纯纯技术文&#xff09; 生活…

Springboot整合Knife4j接口文档

Springboot整合Knife4j接口文档 一、knife4j是什么二、快速开始1.Spring Boot 3版本1.引入依赖2.yml配置:3.示例代码 2.Spring Boot 3版本1.引入依赖2.yml配置3.4. 注解使用 一、knife4j是什么 Knife4j是一个基于SpringBoot构建的文档生成工具&#xff0c;旨在为Java MVC框架集…

web前端考核:全面解读与深入剖析

web前端考核&#xff1a;全面解读与深入剖析 在数字化浪潮席卷全球的今天&#xff0c;Web前端技术已成为互联网行业的核心驱动力之一。对于Web前端开发者而言&#xff0c;如何全面、深入地掌握这一领域的知识与技能&#xff0c;并通过考核验证自己的实力&#xff0c;是每位从业…

Java | Leetcode Java题解之第137题只出现一次的数字II

题目&#xff1a; 题解&#xff1a; class Solution {public int singleNumber(int[] nums) {int a 0, b 0;for (int num : nums) {b ~a & (b ^ num);a ~b & (a ^ num);}return b;} }

什么是 with dice coefficients(Dice系数)

记录一下 什么是 with dice coeffcients?&#xff08;本帖子不是专业的&#xff0c;只是在审稿的时候遇见了 所以就顺手查找一下并记录下来&#xff09; Dice系数和mIoU是语义分割的评价指标。   With Dice coefficients&#xff08;Dice系数&#xff09;是一种用于评估两个…

Linux 命令:iotop

1. 写在前面 本文主要介绍 Linux iotop 或 Input/Output top 命令&#xff1a;用于显示和监控磁盘 IO 使用详情&#xff0c;甚至获取进程现有 IO 使用情况。它是用 python 设计的&#xff0c;需要内核模块才能执行。系统管理员可以用它来追踪可能导致磁盘 I/O 读写量过高的特定…

vite+vue+ts项目中报错解决方案

1.vitevue3ts项目中提示无法找到模块 一&#xff0e;首先产生这个错误是&#xff1a;无法找到模块XXX&#xff0c;并且提示XXX is declared but its value is never read 二&#xff0e; 产生这个问题的原因是我们使用了ts语法&#xff0c;他只能识别.ts文件&#xff0c;并不…

4、js数据类型,检测数据类型

一、js数据类型 基本&#xff08;简单、原始&#xff09;数据类型&#xff1a;number/string/boolean/undefined/null/symbol/bigint引用&#xff08;复杂&#xff09;数组类型&#xff1a;object&#xff08;function,array&#xff0c;date&#xff09; 1、symbol是什么&…

javaweb学习(day14-ThreadLocal文件上传下载)

一、线程数据共享和安全 -ThreadLocal 1 什么是 ThreadLocal ThreadLocal 的作用&#xff0c;可以实现在同一个线程数据共享, 从而解决多线程数据安全问题. ThreadLocal 可以给当前线程关联一个数据(普通变量、对象、数组)set 方法 [源码!] ThreadLocal 可以像 Map 一样存取数…