QT+串口调试助手+基本版

news2024/11/19 18:27:13

一、创建串口调试助手UI界面

1、首先生成串口连接必要参数界面,删除关闭串口控件

2、给参数下拉框添加常见的选项,删除关闭串口控件

3、将串口调试助手参数界面布局整齐,删除关闭串口控件

4、更改控件名字,方便后续编程,删除关闭串口控件

5、添加剩余的控件组成串口调试助手的UI界面,删除关闭串口控件

二、 编辑串口调试助手代码

1、在pro文件中加入serialport

2、编写代码

widget.c

#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
#include <QtSerialPort>
#include <QSerialPortInfo>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    setWindowTitle("Serial_Port");
    serial = new QSerialPort(this);

    //通过QSerialPortInfo查找可用串口,但存在一个局限,如果在软件打开后在插入串口,此时串口不可以识别到
    ui->serailCB->clear();
    foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        ui->serailCB->addItem(info.portName());
    }
    
    //信号与槽函数,当串口接收到数据后转到对应的接收函数
    connect(serial,SIGNAL(readyRead()),this,SLOT(serialPort_readyRead()));
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_openSerialBut_clicked()
{
    if(ui->openSerialBut->text()==QString("打开串口"))
    {
        //设置串口名
        serial->setPortName(ui->serailCB->currentText());
        //设置波特率
        serial->setBaudRate(ui->baundDrateCB->currentText().toInt());
        //设置数据位
        switch(ui->dataBitCB->currentText().toInt())
        {
            case 8:serial->setDataBits(QSerialPort::Data8);break;
        }
        //设置停止位
        switch (ui->stopBitCB->currentIndex())
        {
            case 0:serial->setStopBits(QSerialPort::OneStop);break;
            case 1:serial->setStopBits(QSerialPort::OneAndHalfStop);break;
            case 2:serial->setStopBits(QSerialPort::TwoStop);break;
        }
        //设置奇偶校验位
        switch(ui->checkBitCB->currentIndex())
        {
            case 0:serial->setParity(QSerialPort::NoParity);break;//无校验
            case 1:serial->setParity(QSerialPort::OddParity);break;//奇校验
            case 2:serial->setParity(QSerialPort::EvenParity);break;//偶校验
        }
        //设置流控制
        serial->setFlowControl(QSerialPort::NoFlowControl);

        //打开串口
        if(!serial->open(QIODevice::ReadWrite))
        {
            QMessageBox::about(NULL,"提示","无法打开串口");
            return;
        }
         ui->openSerialBut->setText(tr("关闭串口"));
    }
    else
    {
        serial->close();//关闭串口
        ui->openSerialBut->setText(tr("打开串口"));
    }
}

void Widget::serialPort_readyRead()                             //串口接收
{
    QByteArray lasttext;
    lasttext=ui->receivePlainTextEdit->toPlainText().toUtf8();

    QByteArray receiveText = serial->readAll();
    lasttext=lasttext.append(receiveText);
    ui->receivePlainTextEdit->setPlainText(lasttext);
}

void Widget::on_sendBut_clicked()
{
    QByteArray Sendtext=ui->sendTextEdit->toPlainText().toUtf8();
    serial->write(Sendtext);
}


void Widget::on_clearSendBut_clicked()
{
    ui->sendTextEdit->clear();
}

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QtSerialPort>

QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_openSerialBut_clicked();        //打开串口槽函数
    void serialPort_readyRead();            //串口接收槽函数
    void on_sendBut_clicked();

    void on_clearSendBut_clicked();

private:
    Ui::Widget *ui;             //串口端口
    QSerialPort *serial;                    //串口端口
};
#endif // WIDGET_H

三、实操

本工程只是实现了最基本的串口接收和发送功能,界面和代码都需要很大的改进

四、注意事项

如果出现串口头文件找不到的情况,那么需要更新一下组件

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

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

相关文章

深度学习中权重初始化的重要性

深度学习模型中的权重初始化经常被人忽略&#xff0c;而事实上这是非常重要的一个步骤&#xff0c;模型的初始化权重的好坏关系到模型的训练成功与否&#xff0c;以及训练速度是否快速&#xff0c;效果是否更好等等&#xff0c;这次我们专门来看看深度学习中的权重初始化问题。…

stm32之hal库串口中断和ringbuffer的结合

前言 结合hal库封装的中断处理函数使用rt-thread内部的rt-ringbuffer数据结构源码改造hal库串口部分的源码&#xff0c;将内部静态方法变为弱引用的函数&#xff0c;方便重写标志位采用信号量或变量的两种方式&#xff0c;内部数据分配方式采用动态和静态两种方式 hal库部分串…

qt嵌入并控制外部程序

一、流程 1、调用Window接口模拟鼠标&#xff0c;键盘事件 POINT point; LPPOINT lpppoint &point; GetCursorPos(lpppoint);//获取鼠标位置 SetCursorPos(point.x, point.y);//设置鼠标位置//鼠标左键按下 mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, poi…

.单链表.

单链表就是将所要求得的数据呈现在一条链上进行求解。(用一种链式结构存储数据&#xff0c;这种结构就称之为链表) 题目&#xff1a; 实现一个单链表&#xff0c;链表初始为空&#xff0c;支持三种操作&#xff1a; 向链表头插入一个数&#xff1b;删除第 k&#x1d458; 个插…

Mysql报错红温集锦(一)(ipynb配置、pymysql登录、密码带@、to_sql如何加速、触发器SIGNAL阻止插入数据)

一、jupyter notebook无法使用%sql来添加sql代码 可能原因&#xff1a; 1、没装jupyter和notebook库、没装ipython-sql库 pip install jupyter notebook ipython-sql 另外如果是vscode的话还需要安装一些相关的插件 2、没load_ext %load_ext sql 3、没正确的登录到mysql…

Hibernate入门学习

目录 1、ORM思想概述 2、自定义ORM框架 3、第一个Hibernate程序开发步骤&#xff08;重要&#xff09; 1&#xff09;下载完整包 2&#xff09;创建项目&#xff0c;导入所需jar包 3&#xff09;建立student表 4&#xff09;创建和student表对应的Student实体类 5&…

Sarcasm detection论文解析 |A2Text-Net:一种用于讽刺检测的新型深度神经网络

论文地址 论文地址&#xff1a;A2Text-Net: A Novel Deep Neural Network for Sarcasm Detection | IEEE Conference Publication | IEEE Xplore github:lliyuan1117/A2Text-Net (github.com) 论文首页 A2Text-Net&#xff1a;一种用于讽刺检测的新型深度神经网络 &#x1f4c5…

Gradle 进阶学习 之 build.gradle 文件

build.gradle 是什么&#xff1f; 想象一下&#xff0c;你有一个大型的乐高项目&#xff0c;你需要一个清单来列出所有的乐高积木和它们如何组合在一起。在软件开发中&#xff0c;build.gradle 就是这个清单&#xff0c;它告诉计算机如何构建&#xff08;组合&#xff09;你的软…

阿里低代码引擎学习记录

官网 一、关于设计器 1、从设计器入手进行低代码开发 设计器就是我们用拖拉拽的方法&#xff0c;配合少量代码进行页面或者应用开发的在线工具。 阿里官方提供了以下八个不同类型的设计器Demo&#xff1a; 综合场景Demo&#xff08;各项能力相对完整&#xff0c;使用Fusion…

掌握JavaScript面向对象编程核心密码:深入解析JavaScript面向对象机制对象概念、原型模式与继承策略全面指南,高效创建高质量、可维护代码

ECMAScript&#xff08;简称ES&#xff0c;是JavaScript的标准规范&#xff09;支持面向对象编程&#xff0c;通过构造函数模拟类&#xff0c;原型链实现继承&#xff0c;以及ES6引入的class语法糖简化面向对象开发。对象可通过构造函数创建&#xff0c;使用原型链共享方法和属…

16、ESP32 Web

Web 服务器具有移动响应能力&#xff0c;可以使用本地网络上的任何设备作为浏览器进行访问。 示例功能&#xff1a; 构建 Web 服务器控制连接到 ESP32 的 LED在本地网络的浏览器上输入 ESP32 IP 地址访问 Web 服务器通过单击 Web 服务器上的按钮&#xff0c;更改 LED 状态 //…

C#语言基础

一、复杂数据类型 1. 枚举 1.1 基本概念 1.1.1 枚举是什么 枚举是一个被命名的整型常量的集合&#xff0c;一般用它来表示状态、类型等等 1.1.2 申明枚举和申明枚举变量 申明枚举和申明枚举变量是两个概念 申明枚举&#xff1a;相当于是创建一个自定义的枚举类型 申明枚…

C#实战—代码实现收发文件智能化

在信息化的今天&#xff0c;收发电子文档几乎是每个朋友都要经历的事情。比如班级学委和班长需要收发作业&#xff0c;企业管理者需要收发工作文件。但是&#xff01;&#xff01;&#xff01; 每到要交结果时&#xff0c;往往会发现总会有一些人没有即使交上&#xff0c;50个…

【Leetcode每日一题】 综合练习 - 全排列 II(难度⭐⭐)(71)

1. 题目解析 题目链接&#xff1a;47. 全排列 II 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 算法思路梳理 为了生成给定数组nums的全排列&#xff0c;同时避免由于重复元素导致的重复排列&#xff0c;我们可以遵…

面试中算法(2的整数次幂)

判断一个正整数是否是2的整数次幂&#xff08;如16是2的4次方&#xff0c;返回true;18不是2的整数次幂&#xff0c;则返回false&#xff09;&#xff0c;要求性能尽可能高。 使用一个整型变量&#xff0c;让它从1开始不断乘以2&#xff0c;将每一次乘2的结果和 目标整数进行比较…

【python的魅力】:教你如何用几行代码实现文本语音识别

文章目录 引言一、运行效果二、文本转换为语音2.1 使用pyttsx32.2 使用SAPI实现文本转换语音2.3 使用 SpeechLib实现文本转换语音 三、语音转换为文本3.1 使用 PocketSphinx实现语音转换文本 引言 语音识别技术&#xff0c;也被称为自动语音识别&#xff0c;目标是以电脑自动将…

【网站项目】社区互助平台

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

Object Desktop - Stardock 软件开发商系列套件

Windows 的一大优势在于可高度自定义&#xff0c;能让我们把它打造成一个最符合自己需求的工作和娱乐工具。 在桌面增强工具套件 Object Desktop 中&#xff0c;包含了 Stardock 旗下 10 款生产力和美化工具&#xff0c;可帮助我们打造出美观、实用、高效的 Windows 系统。 St…

Leetcode—163. 缺失的区间【简单】Plus

2024每日刷题&#xff08;126&#xff09; Leetcode—163. 缺失的区间 实现代码 class Solution { public:vector<vector<int>> findMissingRanges(vector<int>& nums, int lower, int upper) {int n nums.size();vector<vector<int>> an…