使用QtCreator C++编写串口调试助手

100编程书屋_孔夫子旧书网

1.首先看一下我设计的界面(我这里比较简单,大家可根据自己的需求进行设计)

(界面设计的过程中,每一个控件的名称最好进行修改,便于后续控件太多不好区分,给控件命名的时候一定要就针对性,一下明白这个控件是干什么的。)

 2.首先看一下准备工作。在pro文件中添加串口需要的文件

 3.widget.h文件 (看看代码一睹为快)

#ifndef WIDGET_H
#define WIDGET_H
#include <QSerialPort>
#include <QWidget>
 
namespace Ui {
class Widget;
}
 
class Widget : public QWidget
{
    Q_OBJECT
 
public:
    QSerialPort *serialport;
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();
 
private slots:
    //打开串口槽函数
    void on_port_openBt_clicked();
    //关闭串口槽函数
 
    void on_port_closeBt_clicked();
    //自定义的槽函数的声明
    void serialreadtext();
//数据发送槽函数
    void on_data_sendBt_clicked();
//数据接受区和数据发送区清空槽函数
    void on_rev_clearBt_clicked();
 
private:
    Ui::Widget *ui;
};
 
#endif // WIDGET_H4.widget.cpp文件
#include "widget.h"
#include "ui_widget.h"
#include<QSerialPortInfo>
#include <QMessageBox>
#include <QString>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{   serialport = new QSerialPort(this); //创建一个串口对象
    ui->setupUi(this);
    //这样我们就获取到 可用的串口名字了
    QStringList m_serialPortName;
    foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
    {
        m_serialPortName << info.portName();
    }
    //添加串口到conbox控件中
    ui->port_comboBox->addItems(m_serialPortName);
    //接收数据需要自己关联槽函数
    connect(serialport,SIGNAL(readyRead()),this , SLOT(serialreadtext()));
}
 
Widget::~Widget()
{
    delete ui;
}
//读数据
void Widget::serialreadtext()
{
    QString buffer;
    buffer=QString(serialport->readAll());
    ui->revEdit->appendPlainText(buffer);
}
void Widget::on_port_openBt_clicked()
{
    QSerialPort::BaudRate baudRate;
    QSerialPort::DataBits dataBits;
    QSerialPort::Parity parity;
    QSerialPort::StopBits stopbits;
    //波特率
    if(ui->rate_comboBox->currentText()=="115200")
    {
        baudRate=QSerialPort::Baud115200;
    }else if(ui->rate_comboBox->currentText()=="9600")
    {
        baudRate=QSerialPort::Baud9600;
 
    }else {
        baudRate=QSerialPort::Baud4800;
    }
    //数据位
    if(ui->data_comboBox->currentText()=="8")
    {
        dataBits=QSerialPort::Data8;
 
    }else if(ui->data_comboBox->currentText()=="7")
    {
        dataBits=QSerialPort::Data7;
    }else if(ui->data_comboBox->currentText()=="6")
    {
        dataBits=QSerialPort::Data6;
    }else if (ui->data_comboBox->currentText()=="5")
    {
        dataBits=QSerialPort::Data5;
    }
 
    //停止位
    if(ui->stop_comboBox->currentText()=="1")
    {
        stopbits= QSerialPort::OneStop;
    } else if(ui->stop_comboBox->currentText()=="2")
    {
        stopbits= QSerialPort::TwoStop;
    }else if(ui->stop_comboBox->currentText()=="1.5")
    {
        stopbits= QSerialPort::OneAndHalfStop;
    }
    //校验位
    if(ui->cheak_comboBox->currentText()=="None")
    {
        parity=QSerialPort::NoParity;
    }
 
    //1.配置端口号
    serialport->setPortName(ui->port_comboBox->currentText());
    //2.配置波特率
    serialport->setBaudRate(baudRate);
    //设置数据位
    serialport->setDataBits(dataBits);
    //设置校验位
    serialport->setParity(parity);
    //停止位
    serialport->setStopBits(stopbits);
    if(serialport->isOpen())//如果串口已经打开了 先给他关闭了
    {
        serialport->clear();
        serialport->close();
    }
 
    if(serialport->open(QIODevice::ReadWrite)==true)
    {
        QMessageBox::information(this ,"提示","串口打开成功");
    }else
    {
        QMessageBox::critical(this ,"提示","串口打开失败");
    }
}
//关闭串口
void Widget::on_port_closeBt_clicked()
{
    QMessageBox::information(this ,"提示","串口关闭成功");
     serialport->close();
}
//发送数据
void Widget::on_data_sendBt_clicked()
{
    serialport->write(ui->sendEdit->text().toLocal8Bit().data());
}
//清空接受区
void Widget::on_rev_clearBt_clicked()
{
    ui->revEdit->clear();
}

5.好啦,完成上面的步骤,一个简单的串口调试助手就完成了,大家快行动起来吧。

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

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

相关文章

6.1 Go 数组

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

深入分析 Android Activity (十一)

文章目录 深入分析 Android Activity (十一)1. Activity 的内存管理和优化1.1 内存泄漏的常见原因1.2 避免内存泄漏的方法1.3 内存泄漏检测工具 2. Activity 的配置变更处理2.1 处理配置变更2.2 保存和恢复状态2.3 使用 ViewModel 3. Activity 的测试3.1 单元测试3.2 UI 测试 4…

质量工具系列之Dependency-Track

项目开发中依赖了很多第三方开源工具&#xff0c;对于其版本&#xff0c;漏洞等因为时间或者是数量太多而无法关注到&#xff0c;Dependency-Track解决这些问题。 Dependency-Track 是一个开源组件分析平台&#xff0c;是开放网络应用安全项目&#xff08;OWASP&#xff09;的一…

深度解析:优质前端社区工作的多维度探索

深度解析&#xff1a;优质前端社区工作的多维度探索 在数字时代的浪潮中&#xff0c;前端社区工作已然成为推动技术发展与创新的重要力量。一个优质的前端社区工作不仅能够汇聚智慧、促进技术交流&#xff0c;还能够为社区成员提供成长的空间和平台。然而&#xff0c;究竟什么…

web自动化-数据驱动与失败用例截图、失败重新运行

因为只有失败的用例需要截图&#xff0c;那么问题就是&#xff1a; 什么时候用例会失败&#xff1f; 数据驱动测试 我们前面覆盖到的用例都是正常的用例&#xff0c;如果要测试异常的用例呢&#xff1f; 我们来写一下登录的异常 场景&#xff1a;【login_page】 # 用户输入框…

【Qt】Qt中的信号槽

一、信号和槽概述 信号槽是Qt矿建引以为豪的机制之一。 所谓信号槽&#xff0c;实际上就是观察者模式&#xff08;发布——订阅模式&#xff09;。当某个事件发生之后&#xff0c;比如&#xff0c;按钮检测到自己被点击了一下&#xff0c;它就会发出一个信号。这种发出的信号是…

LAMP集群分布式实验报告

前景&#xff1a; 1.技术成熟度和稳定性&#xff1a; LAMP架构&#xff08;Linux、Apache、MySQL、PHP&#xff09;自1998年提出以来&#xff0c;经过长时间的发展和完善&#xff0c;已经成为非常成熟和稳定的Web开发平台。其中&#xff0c;Linux操作系统因其高度的灵活性和稳…

Linux 主机一键安全整改策略

为防止linux主机被恶意攻击&#xff0c;和受到攻击后能更快定位到源头&#xff0c;需要对linux主机做一些参数配置。 比如禁用root的远程登录、用户多次密码验证失败后被锁、禁止系统账号交互式登录等等。 下面是linux主机安全整改的一些简单介绍&#xff0c;最后会通过脚本一…

【XR806开发板试用】基础篇,从零开始搭建一个LCD彩屏时钟(ST7735S驱动)

本文从搭建环境开始&#xff0c;step by step教大家使用XR806实现驱动SPI屏幕&#xff08;ST7735S驱动&#xff09;&#xff0c;并连接WiFi实现ntp对时&#xff0c;最终实现把时间显示到屏幕上。 #1. 搭建开发环境 1. 安装编译环境所需的依赖包 基于ubuntu 20.04&#xff0c;按…

UI自动化测试最佳设计模式POM

当使用Selenium进行UI自动化测试时&#xff0c;Page Object Model&#xff08;POM&#xff09;是一种最佳实践的设计模式。POM的核心思想是通过将页面封装成对象&#xff0c;使得测试代码更加清晰、可维护和可重用。 POM的主要组成部分包括页面对象类、元素定位方式和操作方法…

MybatisPlus @TableField之SqlCondition源码解析

应用对象&#xff1a;模型&#xff0c;作用&#xff1a;调用IService接口&#xff0c;使用查询包装器实现灵活的条件查询。 TableField(conditionSqlCondition.LIKE) 注解使用逻辑 com.baomidou.mybatisplus.extension.service.IService.page(分页对象&#xff0c;查询包装器…

“区块链技术在网络安全领域的革新应用与挑战“

区块链技术&#xff0c;以其去中心化、不可篡改和透明度高的特性&#xff0c;在网络安全领域展现出了巨大的革新潜力&#xff0c;同时也带来了一系列新的挑战。以下是区块链技术在网络安全领域的应用及其面临的主要挑战的深入分析。 革新应用 1. 数据保护与隐私增强&#xff…

PHP身份证识别接口、线上平台如何实现身份证实名认证功能?

线上平台实现身份证实名认证的功能&#xff0c;需要结合身份证识别接口来完成。首先&#xff0c;用户通过上传身份证图片或者拍照的方式实现证件信息的提取&#xff0c;身份证实名认证接口通过对提取到的证件信息进行核验&#xff0c;以此来实现线上用户身份的实名认证&#xf…

LabVIEW车轮动平衡检测系统

LabVIEW车轮动平衡检测系统 随着汽车行业的快速发展&#xff0c;车轮动平衡问题对乘坐舒适性、操控稳定性及安全性的影响日益凸显&#xff0c;成为了提高汽车性能的一个关键环节。传统的检测系统因精度低、成本高、操作复杂等问题&#xff0c;难以满足现代汽车行业的需求。开发…

行车安全:UWB模块的智能化在车辆安全系统中的作用

随着交通车辆数量的不断增加和道路交通拥堵的加剧&#xff0c;车辆安全问题日益引起人们的关注。在这种背景下&#xff0c;超宽带&#xff08;UWB&#xff09;技术作为一种新兴的定位技术&#xff0c;正逐渐应用于车辆安全系统中&#xff0c;为提高车辆行车安全性提供了新的解决…

Unity真机打包地形不显示

Using terrain.drawInstanced in a build - Shader unsupported: Hidden/Nature/Terrain/Utilities Terrain missing on build 大概是两种思路 第一是材质shader丢失&#xff0c;把Terrain相关的shader都添加到ProjectSetting里 第二是地形Inspector面板&#xff0c;把Draw …

Django配置

后端开发&#xff1a; python 解释器、 pycharm 社区版、 navicate 、 mysql(phpstudy) 前段开发&#xff1a; vs code 、 google 浏览器 django 项目配置 配置项目启动方式 创建模型 创建一个应用 在应用中创建模型类 根据模型类生成数据表 创建应用 创建模型类 …

智能除螨—wtn6040-8s语音芯片方案引领除螨仪新时代

语音螨仪开发背景&#xff1a; 随着物联网技术的快速发展&#xff0c;除螨仪作为家庭清洁的重要工具&#xff0c;其智能化、人性化的设计成为提升市场竞争力的关键。置入语音芯片的除螨仪&#xff0c;通过开机提示、工作状态反馈、操作指引、故障提醒等内容。用户可以更加直观…

邦注科技三机一体除湿干燥机在工业中的应用

三机一体除湿干燥机在工业中的应用广泛且重要&#xff0c;其结合了传统除湿机、冷凝器和加热器的功能&#xff0c;具有节能、环保、方便等特点。以下是关于三机一体除湿干燥机在工业中应用的详细解析&#xff1a; 一、应用领域 电子制造行业&#xff1a;在半导体、集成电路和…

安卓手机APP开发__超宽带(UWB)通信

安卓手机APP开发__超宽带(UWB)通信 目录 概述 控制方/发起方与控制方/响应方 参数范围 后台测距 STS 配置 步骤 使用限制 代码示例 示例应用 UWB 范围 RxJava3 支持 生态系统支持 支持 UWB 的移动设备 第三方 SDK 概述 注意 &#xff1a;UWB 目前仅支持 Jetpac…