从零开始实现自己的串口调试助手(7) -隐藏面板/刷新串口号/实现多文本

QT开发串口助手(二)——实现点击按钮刷新串口功能 上一章我们完成了串口库的导入,并写了一段测试代码,接下来我们撸代码。今天由于网速比较慢,进不了QT官网, 但是我在QT助手上搜索,也可以看到帮助文档。 一. 测试代码讲解 QList QSerialPortInfo::availablePorts()函数返回一系列可使用的QSerialPortInfo对象 我们再看看QSerialPortInfo对象有什么熟悉或者方法,如下图所示,有这些方法, 所以我们的测试代码中,直接打印端口的portName()。 二. 页面显示可用的串口信息 1. UI布局 . 阅读详情

隐藏/拓展面板/历史:

ui界面操作:

选中隐藏面板按钮,勾选checkable

创建bool类型的槽函数

隐藏/拓展面板槽函数:



void Widget::on_btnHideTable_clicked(bool checked)
{
  if(checked){

      ui->btnHideTable->setText("拓展面板");
      ui->groupBoxTexts->hide();
  }
  else{

      ui->btnHideTable->setText("隐藏面板");
      ui->groupBoxTexts->show();

  }

}

隐藏/拓展面板效果演示

同理隐藏/拓展历史的槽函数如下

隐藏/拓展历史槽函数

void Widget::on_btnHideHistory_clicked(bool checked)
{
    if(checked){
        ui->btnHideHistory->setText("拓展历史");
        ui->groupBoxRecord->hide();
    }
    else{
        ui->btnHideTable->setText("隐藏历史");
        ui->groupBoxRecord->show();

    }
}

隐藏/拓展历史效果演示

当然,补充同时隐藏面板和历史也是可以的效果如下

完成串口号列表刷新
 

自定义控件实现

mycombobox.h

#ifndef MYCOMBOBOX_H
#define MYCOMBOBOX_H

#include <QComboBox>
#include <QWidget>

class MyComboBox : public QComboBox
{
    Q_OBJECT  //这个宏里面存放需要的信号和槽函数 - 让整个类具备信号与槽的能力
public:
    MyComboBox(QWidget *parent);
protected:
    void mousePressEvent(QMouseEvent *e) override; //重写鼠标被按下事件

signals:
    void  refresh();

};

#endif // MYCOMBOBOX_H

mycombobox.cpp

#include "mycombobox.h"

#include <QMouseEvent>


MyComboBox::MyComboBox(QWidget *parent):QComboBox(parent)
{

}

void MyComboBox::mousePressEvent(QMouseEvent *e)
{
    // 只有这个按键被鼠标左键按下的时候我们才发出一个信号 - 刷新串口
    if(e->button() == Qt::LeftButton)
       emit refresh();
    //其他鼠标事件让原本的处理方式实现
     QComboBox::mousePressEvent(e);
}

提升为我们自定义的控件

添加信号与槽

在widget.cpp的构造函数中,绑定信号与槽

实现槽函数

void Widget::refreshSerialName()
{
    //清空之前读到的ComBobox
    ui->comboBox_serialNum->clear();
    // 实现串口自动检测,并且显示到需要串口号的ComboBox 里面
    QList<QSerialPortInfo> serialList = QSerialPortInfo::availablePorts(); // 检测系统可行的串口,添加到列表中
    for(QSerialPortInfo serialInfo : serialList){ //遍历我们得到的列表
        qDebug() << serialInfo.portName();
        ui->comboBox_serialNum->addItem(serialInfo.portName());//将我们得到的串口名字,添加到ComboBox选项中
    }
    ui->label_SendStatus->setText("Com Refresh!");
}

实现效果

当拔出串口工具(如CH340)的时候也会刷新列表

实现多文本发送

定义槽函数:

基础方法槽函数

void Widget::on_pushButton_t1_clicked()
{
  //将多文本框的内容读取到发送框中
  ui->lineEdit_SendContext->setText(ui->lineEdit_t1->text());
  //如果左边的HEX发送被勾选了,我们就HEX格式发送
  ui->checkBox_HexSend->setChecked(ui->checkBox_t1->isChecked());
  //将信息发送
  on_btnSendContext_clicked();


}

实现效果:

可以看到要使用这种方法实现的话,需要构建9个槽函数,太啰嗦

我们可以使用一下方法优化

优化实现

初始化

创建多文本存放数组/并绑定信号与槽

(在构造函数里面创建)

    QList<QPushButton *>buttons;
    for(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()));
     }
    }

槽函数

//findChild 方法用于查找具有指定类型和名称的第一个子对象

//property

定义:Qt中的property允许开发人员声明C++对象的属性,并提供了统一的方法来访问和操作这些属性。
用途:与QObject的信号和槽机制结合使用,以便在属性值更改时触发信号。使用property可以简化代码,提高可读性和可维护性。

void Widget::on_command_button_clicked()
{
   QPushButton *btn = qobject_cast<QPushButton * >(sender());
   if(btn){
   int num = btn->property("buttonId").toInt(); // 获得编号 i
   //qDebug()<<num;
   QString lineEditName = QString("lineEdit_t%1").arg(num); // 拼接出我们需要的空间名
   QLineEdit *lineEdit = findChild<QLineEdit *>(lineEditName); // 找出这个控件名对应的控件
   if(lineEdit) //if能找到这个控件
      ui->lineEdit_SendContext->setText(lineEdit->text());

   // 选择是否HEX发送
   QString checkBoxName = QString("checkBox_t%1").arg(num);
   QCheckBox *checkBox = findChild<QCheckBox *>(checkBoxName);
   if(checkBox)
     ui->checkBox_HexSend->setChecked(checkBox->isChecked());
   //发送
   on_btnSendContext_clicked();
   }
}


效果演示

Qt6串口通信(实时接收数据、刷新串口号) 目录一、打开串口二、发送数据三、接收数据四、关闭串口串口通信大致分为四个部分:打开串口、发送数据、接收数据、关闭串口,总的来说并不难,本文是结合qml界面实现完整功能,以下是部分代码:CMake: qmake: 一、打开串口 注意:1.函数传参port为需要打开的串口号,用一个下拉框接收识别到的所有串口号并实时刷新,参考如下代码:新建一个serialportmanager.h文件 在main.cpp里实例化 qml的下拉框代码 2.m_serial.setReadBufferSi 阅读详情

相关推荐

串口数据可视化实战:SerialChart配置与嵌入式调试应用

在嵌入式系统开发与硬件调试中,实时数据可视化是理解系统行为、验证算法性能的关键环节。其核心原理是通过串口通信协议,将微控制器采集的传感器数据或内部状态变量,以特定格式传输至上位机,并利用图形化工具进行动态绘制。这项技术的工程价值在于,它能将抽象的数字序列转化为直观的波形,极大地提升了调试效率,尤其在PID控制算法整定、传感器信号分析、系统动态响应观测等场景中不可或缺。本文聚焦于轻量级开源工具SerialChart,深入解析其基于文本配置文件的灵活架构,涵盖从虚拟串口测试到真实硬件联调的全流程,并分享多量程同

weixin_30786657的博客 335

非常好用的 串口调试助手

3.串口波特率可以选择为300bps-1500000bps. (波特率>115200时需要硬件支持)。7.自动断帧功能,如果接收到两个数据包之间有时间间隔,会在一包数据后面插入换行,下一包数据另起新行,以方便观测。6.自定义命令列表,将多条要发送的命令组合成一个列表。4.可以在发送框输入您想发送的字符串,并发送,发送支持 “字符串"或"HEX”。可将按协议发送的数据显示成波形。并支持波形回看功能和截图功能。2.接收到的数据可按 “字符串"或"HEX十六进制” 显示。1.接收从串口进来的数据并在窗口显示。

ddddd2223323的博客 927

Qt制作基础功能的串口调试助手

使用qt5.12制作串口调试助手

Qzlln的博客 655

串口助手(布局,图标,串口号,隐藏界面,显示实时时间)

从这篇文章开始 教大家自己制作一个串口助手软件,并实现基本的功能。学做一个 串口助手可以一边回顾复习 QT 的相关知识,也可以进一步了解串口助手功能方法,一举两得。下一篇文章介绍 串口如何发送,接收数据等。

wuyiyu_的博客 4269

C#项目实战——串口控制下位机开关程序【实例】

本案例实现功能包括:1、刷新串口功能:通过点击刷新串口,可以将可使用的COM口添加到下拉菜单;2、打开串口功能:通过点击打开串口按钮,可以打开下拉框选中的COM口,并将文本改成关闭串口,再次点击则能关闭相应串口;3、点击各通道的开关按钮,通过打开的串口发出不同的指令,从而实现相应的动作;

做有价值的事,积累有价值的笔记! 1896

串口---实现串口号的实时更新(热插拔检测)

1、采用定时器的方式进行实时检测。 2、采用windows消息WM_DEVICECHANGE检测USB设备的插拔状态,只有顶层窗口可以捕获此消息: 此消息在类向导中没有,需要我们手动添加,步骤如下: (1)、声明一个消息响应函数: afx_msg BOOL OnDeviceChange(UINT nEventType, DWORD dwData); (2)、添加消息映射: BEGI...

小米的修行之路 3091

【Secure CRT】关键词高亮变色

关于Secure CRT串口助手的关键字高亮设置方法

Evenurs的url 9833

用CodeBlocks编写的串口调试助手

用Code::Blocks编写的串口调试助手,包含几个可执行文件所需的动态库,动态库均经过编译,下载者可以直接配合wxWidgets库实用。

体验很棒的串口调试助手

串口调试

ddddd2223323的博客 477

wxWidgets 串口在visual stdio 2010环境下的实现

wxWidgets 框架加下,vs2010编译环境,利用wxctb-0.9实现串口功能。

博通PEX89000 PCIe 5.0交换芯片:如何为AI集群构建高效GPU互联架构

本文深入解析了博通PEX89000 PCIe 5.0交换芯片如何为AI集群构建高效的GPU互联架构。该芯片通过提供高带宽、低延迟的PCIe 5.0交换能力,打破传统GPU通信的带宽瓶颈,并支持多主机共享、资源池化及软件定义拓扑,从而显著提升大规模AI训练与推理任务的效率与资源利用率。

weixin_29214559的博客 411

【串口助手开发】添加按钮弹窗功能,创建新窗口,按钮按下后,跳转到另一个窗口界面

在串口助手中,按下按键按钮,弹出一个新窗口新窗口还有其他新的功能,需要用户自己在新窗口中编辑定义。

weixin_60324241的博客 526

DBeaver连接ClickHouse保姆级教程:从安装到成功测试(附驱动下载问题解决)

本文提供了一份详细的DBeaver连接ClickHouse实战指南,重点解决了驱动下载失败等常见问题。文章从环境准备、DBeaver安装讲起,详细阐述了手动配置ClickHouse驱动的可靠方案,并逐步指导完成连接配置与测试,最后介绍了基础操作与查询优化技巧,旨在帮助用户高效完成连接并快速上手使用。

pink的博客 879

Qt - 锁屏界面加虚拟小键盘

上面是“虚拟键盘程序”的源代码,当检测焦点在 QlineEdit 单行输入栏上,则显示虚拟键盘,否则隐藏虚拟键盘。虚拟键盘调出的显示位置跟 QlineEdit 对齐,尝试过但还是无法改变显示位置。鼠标点击“密码输入栏”,弹出虚拟键盘,输入锁屏密码后,点击虚拟键盘外部区域,则会隐藏虚拟键盘,再点击登录,成功进入主界面。上面是“锁屏界面程序”的头文件,这里定义了一个“虚拟键盘”类对象指针,锁屏密码设置为“123456”。上面是“虚拟键盘程序”的头文件,这里使用了单例模式,保证一个程序只存在一个输入法实例对象。

hw5230的博客 1476

纽扣电池供电系统优化:NBM5100A与STM32F745VG组合方案

在低功耗物联网设备设计中,能量管理是核心挑战之一。纽扣电池因其体积小、成本低被广泛采用,但瞬时大电流需求常导致电压骤降和寿命缩短。通过超级电容缓冲技术,可以实现能量的细水长流式存储与集中释放。NBM5100A电源管理IC与STM32F745VG微控制器的组合方案,采用双阶段能量管理架构,先以恒定小电流充电,再通过电容释放大电流。这种方案不仅能提升系统稳定性,还能延长电池寿命3-5倍,特别适合智能门锁、无线传感器等需要间歇性高功率输出的场景。

weixin_29194255的博客 257

保姆级教程:在Windows/Mac上从零部署清华Kronos股票预测模型(含Qlib数据更新避坑指南)

本文提供了一份详细的指南,帮助用户在Windows和Mac系统上从零部署清华Kronos股票预测模型,包括环境配置、模型权重获取、Qlib数据更新避坑等关键步骤。特别针对国内用户遇到的网络问题和数据更新不及时提供了解决方案,适合量化投资和金融科技爱好者快速上手。

weixin_29053577的博客 623

Qt项目之串口调试助手

Qt项目--记事本。完整源码在我的资源里免费下载!界面如下,模仿安信可的串口调试助手界面,功能所见即所得:​话不多说,开始该项目的学习。/*--------自定义的mycombobox.cpp文件里--------*///鼠标按下的事件//发出一个信号/*-------构造函数里-------*/// 刷新可用串口名称的函数(通过自定义ComboBox,检测鼠标点击事件)// 清空串口号下拉框中的所有选项// 获取当前系统中所有可用的串口信息// 遍历所有可用的串口信息。

sakabu的博客 1792

UMI——斯坦福刷盘机器人:通过手持夹爪革新数据收集方式,且使用视觉SLAM和Diffusion Policy预测动作

没想到今年年初的斯坦福mobilealoha的热度刚过,而到今年2月的下旬,斯坦福另一个团队又推出了UMI刷盘机器人,且这两个团队还互相认识、还在一块共同切磋(顺带小小感叹一下,斯坦福的氛围是真好而且真高产)斯坦福UMI刷盘机器人其与mobile aloha(以及AirExo: Low-Cost Exoskeletons for Learning Whole-Arm Manipulation in the Wild)最大的不同在于其收集数据处理的非真实的机器人,而是一个手持夹持器(从而大幅降低成本)

u013250861的博客 1357

485串口调试助手_非常好用的 Win10 串口调试助手

完美适配高分屏. 解决大部分win32类软件在高分屏模糊问题. 1.接收从串口进来的数据并在窗口显示。 2.接收到的数据可按 “字符串"或"HEX十六进制” 显示。3.自动断帧功能,自动在两次数据包之间插入换行,以方便观测。 4.波形显示功能。可将按协议发送的数据显示成波形。并支持波形回看功能和截图功能。5.中文显示无乱码。可以在设置中更改字符串编码类型。支持多种字符编码 "ASCII","GB2...

weixin_39647412的博客 6852

【LAMMPS学习】五、LAMMPS命令(8) Pair_style 势

所有LAMMPS pair_style命令如下表所示。有些样式有加速版本。这由括号中的附加字母表示:g = GPU, i = INTEL, k = KOKKOS, o = OPENMP, t = OPT。

荷塘阅色 3016

《QGIS快速入门与应用基础》108:CGCS2000对应的投影坐标系

本文详细解析了CGCS2000地理坐标系对应的各类投影坐标系,包括高斯-克吕格3°带/6°带、UTM、地方独立投影和Web墨卡托投影。文章系统阐述了各投影类型的分带规则、参数设置、精度特性及适用场景,并提供了EPSG编码对照表和QGIS操作指南。通过"基准+投影"的绑定机制,这些投影坐标系实现了平面坐标与经纬度的精准转换,满足从大比例尺工程测量到Web地图服务等不同应用需求。内容涵盖投影原理、坐标格式、变形控制等关键技术要点,为GIS开发者和测绘人员提供了实用的参考信息。

LuckyHanMo的博客 541

让串口调试助手像命令行一样

说到嵌入式的实时系统,大家首先想到的是不是 闻名遐迩的 UCOS 呢? UCOS 简单,易移植,在关键部分移植汇编语言,是入坑 RTOS[1]的不二选择.接触了一段时间之后,偶然在网上看到,原子哥(正点原子) 的开源教材里头也有介绍 RT-Thread OS 系统,然后开始了解和使用Rt-thread. 它的优势是:商用无风险,不限任务个数,各种协议栈齐全(尤其在 IoT方面),兼容部分POSI...

weixin_30539835的博客 546

华为OD技术面真题 - Python开发 - 2

汇总华为OD技术面八股Python八股,高频技术真题并提供详细解答。

qq_45776114的博客 910

linux刷新串口,linux – 串口未正确刷新

我有一个RPi(是的,我知道,也许有人认为这属于RPi网站,但我认为它与Linux有关,所以StackOverflow是正确的地方)我正在使用Python3通过MAX485在一些Arduinos之间进行通信这或多或少都有效,因为我发现我需要做一些奇怪的解决方法才能让一切工作“正常”.如果我发送数据:GPIO.output(23, 1) # Pulling transmit pin high to ...

weixin_39892460的博客 540

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Qt串口通信,QSerialPort的使用

前言 Qt写上位机时,串口通信是个常用功能,在Qt4的时候有第三方模块QextSerialPort,到了Qt5.1官方提供了QSerialPort模块。 目录 前言 获取串口信息:QSerialPortInfo 串口IO操作:QSerialPort 实例操作 补充:16进制文本(如“0A 13 EF”)转16进制数据(如0x0A 0x13 0xEF) 使用该模块需要在pro文件中添...

龚建波 2万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

linux 串口 刷新缓存,linux – 串口未正确刷新

我有一个RPi(是的,我知道,也许有人认为这属于RPi网站,但我认为它与Linux有关,所以StackOverflow是正确的地方)我正在使用Python3通过MAX485在一些Arduinos之间进行通信这或多或少都有效,因为我发现我需要做一些奇怪的解决方法才能让一切工作“正常”.如果我发送数据:GPIO.output(23, 1) # Pulling transmit pin high to ...

weixin_34668850的博客 875

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: 从零开始实现自己的串口调试助手(6) -换行问题
下一篇: 从零开始实现自己的串口调试助手(8)-循环发送
mx_jun
博客等级 码龄5年 1605粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值