【从零入门Qt】开发一款属于自己的串口调试助手

2023-05-16

暑假来深圳这边实习,做的是嵌入式方向,负责人分配给我的第一个任务是用Qt写一个串口调试助手。这个任务总体来讲难度适中,尽管我没接触过Qt,但能查到很多很多的资料,甚至包括别人写好的源代码,所以有很多的学习资源。

我第一天在同学的推荐下,看了一个入门的文档,《Qt 学习之路 2》,其中内容讲的比较基础,基本可以理解,算是能对Qt的语法了解个大概。而且如果实在不懂,也可以参看b站上的视频教程,是黑马程序员的教程,视频内容比较冗长,但对于初学者来说可能更好理解,各取所需,看个人选择。

因为负责人只给了我三天的时间,所以我也就花了一天左右的时间看教程,就开始看我在网上看的一份源码了。当时我的进度是黑马程序员看了不到10个视频,《Qt 学习之路 2》看了不到20节教程,虽然说看了不少,但我当时还是很慌的,对于我这种小白来说,还是不知道源代码是什么意思,但这个时候我能大概明白每个函数要做什么功能了,也就是我看懂了函数名,但函数里的句子我看不懂。

然后我就选择了按照这份代码自己复刻一份,算是尝试着自己写一下。

于是我新建了一个project,名字是Myserialport,发现源代码中main.cpp完全一样,也就是一个窗体的显示功能,很好理解,直接略去~

上面的mainwindow.h文件里面有很多库函数的引用,函数的声明,我姑且认为不重要,暂时略去

而代码最多的就集中在mainwindow.cpp文件里了,也是我最需要解决的部分!

这是我新建工程后的代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

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

而源代码在MainWindow::MainWindow(QWidget *parent)中添加了很多窗体生成的初始化语句

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    textstate_receive = false;                 //初始化发送窗口状态为文本模式
    textstate_send = false;                    //初始化接收窗口状态为文本模式
    serialport = new QSerialPort;              //创建QSerialPort类,需要在头文件中添加#include <QSerialPort>
    ui->send_button->setEnabled(false);        //初始化接收按钮不可用
    ui->close_port->setEnabled(false);         //初始化接收按钮不可用
    ui->Receive_text_window->setReadOnly(true);//讲接收窗口设置为只读窗口
    setWindowTitle("串口调试助手");              //设置程序的标题
    setWindowIcon(QIcon(":/images/exe.jpg"));  //设置程序左上角图标
    find_port();                               //查找可用串口函数
}

以上语句还是比较好理解的,每句话我都进行了注释。

下面的代码就是定义各个函数,而.h文件里的很多函数声明也就很好理解了,也就是在.h文件里定义一下各个函数

比如以下很重要的两个函数,用于实现数据的发送和接收

//发送数据
void MainWindow::on_send_button_clicked()
{
    if(textstate_send == false)  //文本模式
    {
        serialport->write(ui->Send_text_window->toPlainText().toUtf8());
    }

    if(textstate_send == true)     //hex模式
    {
        QString str = ui->Send_text_window->toPlainText();
        int num = str.toInt();
        str = str.setNum(num,16);
        ui->Send_text_window->clear();
        ui->Send_text_window->append(str);
        serialport->write(ui->Send_text_window->toPlainText().toLatin1());
    }
}
//窗口显示串口传来的数据
void MainWindow::Read_Data()
{
    QByteArray buf;
    buf = serialport->readAll();
    if(!buf.isEmpty())          //将数据显示到文本串口
    {

        if(textstate_receive == false)   //文本模式
        {
            QString str = ui->Receive_text_window->toPlainText();
            str += tr(buf);
            ui->Receive_text_window->clear();
            ui->Receive_text_window->append(str);
        }
        if(textstate_receive == true)   //hex模式
        {
            QString str = ui->Receive_text_window->toPlainText();
            // byteArray 转 16进制
            QByteArray temp = buf.toHex().toUpper();
            str += tr(temp);
            ui->Receive_text_window->clear();
            ui->Receive_text_window->append(str);
        }
    }
    buf.clear();    //清空缓存区
}

最后实现了以下的界面,以及文本模式和串口模式两种模式转换的数据收发

p.s.:尝试了很久想要解决中文无法显示的问题,最终无果…

在这里插入图片描述

有需要的话可以在这个链接下载嗷~

个人博客欢迎关注,www.qianhongbo.top

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【从零入门Qt】开发一款属于自己的串口调试助手 的相关文章

  • 关机一直显示正在关闭服务器,Win7系统关机速度慢一直显示“正在关机”怎么解...

    win7系统关闭速度慢的问题一直困扰着许多用户 xff0c 开机 关机速度快都是很重要的 有些使用win7旗舰版一段时间后 xff0c 发现关机速度很慢 xff0c 屏幕一直显示 正在关机 要等待很久才可以真正关闭 xff0c 浪费很长时间
  • linux 开源路由器,OpenWrt 18.06.4 发布 开源路由器项目

    OpenWrt Project 是一个针对嵌入式设备的 Linux 操作系统 xff0c 它用于取代供应商提供的各种无线路由器和非网络设备固件 W I R E L E S S F R E E D O M
  • 大智慧行情服务器在哪个文件夹,【大智慧】大智慧公式在哪个文件夹?

    以前重装系统和重股票软件自选股 公式都得重来一次烦死了 xff0c 这里给股友整理一下 xff0c 希望对股友有用 xff1a 大智慧L2的公式指标是在 dzh2 userdata SELFN DT 大智慧中的自选股放在 dzh cfg n
  • 微型计算机硬件组成一般包括,微机的硬件组成试题解析

    微机的硬件系统指构成微机系统的物理实体或物理装置 从系统构成来说 xff0c 微型计算机与其他类型的计算机既有共同之处 xff0c 也有其自身的特点 xff0c 主要表现在集成的微处理芯片以及总线结构上 从用户角度看 xff0c 微机硬件系
  • 用sci-hub的文献检索方法

    很多文献在知网上下载要付费 xff0c sci hub上有很多不用付费并且独有的数据库文献资源 可以作为文献检索的补充 下面是一些具体方 一 下载网址 SCI Hub论文下载可用网址链接 xff08 实时更新 xff09 YoviSun工具
  • ubuntu及shell脚本常用命令入门

    一 Shell命令 二 ubuntu软件安装方法 三 Ubuntu文件系统结构 四 ubuntu磁盘文件 五 Linux下常用的压缩格式 六 linux用户和用户组 七 Ubuntu Linux文件权限 八 linux连接文件 九 vim编
  • linux 内存 动态加载,Static_Module: 本项目在MCU(STM32)平台实现类似于Linux内核模块的动态加载功能,但不是将模块加载到内存(SRAM)而是加载到Flash。 所以叫做...

    Static Module Demo 介绍 本项目在MCU STM32 平台实现类似于Linux内核模块的动态加载功能 xff0c 但不是将模块加载到内存 SRAM 而是加载到Flash 所以叫做静态加载 xff0c 而被加载的模块就叫静态
  • 大数据学习心得与总结

    作业一 hadoop搭建伪分布式 1 关闭防火墙 systemctl disable firewalld 2 传输JDK和HADOOP压缩包 版本自行留意 这里建议使用xshell和xftp6 3 解压JDK HADOOP 这里解压安装至o
  • docker--容器和镜像的导入导出及部署

    一 镜像导出 save 1 查看镜像 docker images 2 导出镜像 docker save o test tar image name 或 docker save image name gt test tar 二 容器导出 ex
  • 项目经验介绍的STAR法则--面试

    STAR法则 这几天面试其他人的时候 xff0c 找出来了这个STAR法则 xff0c 我一般也是这么去面试和引导面试者的 xff0c 分享出来 xff0c 供大家参考 什么是STAR法则 xff0c STAR 是SITUATION xff
  • 浮点数的二进制表示方法

    浮点数的二进制表示 Double型 xff0c 64位 例一 xff1a 已知 xff1a double类型38414 4 xff0c 求 xff1a 其对应的二进制表示 分析 xff1a double类型共计64位 xff0c 折合8字节
  • PHP解决http和https跨域,PHP解决HTTP和HTTPS跨域共享session的方法及代码实例

    HTTP HTTPS协议下跨域解决session共享的办法 xff0c 也许不是最好的 xff0c 但是比较实用 如下是具体的解决方案 阿里西西小编给您推荐这个PHP解决HTTP和HTTPS跨域共享session的方法及代码实例 xff0c
  • ucosii使用

    当需要同时跑多个任务的时候裸机显然不能很好的完成使命 xff0c 这个时候我们可以给单片机上系统 xff0c 创建多任务 xff0c 完成复杂逻辑 一 首先移植uocii在我们的板上 xff0c 根据mcu型号移植ucosii xff0c
  • QT以POST方法上传文件(文本、图片、excel文件等)

    最近项目需要用QT上传文件给HTTP服务器 之前服务器接收的数据格式都是json xff0c 这次是form data 经查找资料 xff0c 需要用到QHttpMultiPart和QHttpPart这两个类 xff0c 看QT的实例教程可
  • js数组删除元素

    var arr 61 39 a 39 39 b 39 39 c 39 若要删除其中的 39 b 39 有两种方法 xff1a 1 delete方法 delete arr 1 这种方式数组长度不变 此时arr 1 变为undefined了 但
  • 回调函数简单使用

    一 回调函数是什么 xff0c 我们为什么要用它 xff1f 回调函数就是一个通过函数指针调用的函数 如果你把函数的指针 xff08 地址 xff09 作为参数传递给另一个函数 xff0c 当这个指针被用来调用其所指向的函数时 xff0c
  • pwm控制电机原理

    首先我们要明白电机的原理 电机 简单来说就是 实现电能与机械能相互转换的电工设备 那么我们经常使用的直流电机原理就是 xff1a 电生磁 xff1a 通电导线会产生磁场 也就是电磁感应 旋转磁场带动转子转动 电动机是由定子和转子组成 xff
  • FLASH操作记录

    使用的单片机为GD403系列 xff0c 要操作的数据flash地址位于bank1 xff0c 最小操作单位为一页 xff0c 即4k 下面程序演示操作一页中部分内存空间 span class token macro property sp
  • MCU启动异常分析记录

    一 问题背景 量产的产品在品质抽检中出现设备概率无法正常使用的问题 xff0c 经过初步定位确定是MCU上电未正常启动 二 问题分析以及定位 在产品中考虑到MCU程序升级 RF SUB 1G升级 xff0c NB IOT等无线升级方法 xf
  • u-BOOT启动流程

    1 u boot入口 xff1a 入口即第一行程序 xff0c 程序的链接是由链接脚本决定的 xff0c 编译uboot之后 xff0c 可以在根目录下生成u boot lds文件 打开lds文件可以看到代码当前入口点 xff1a xff1

随机推荐

  • qt字符串与字符串数组操作

    QString定义 QString s1 61 abc QString s2 hello 字符串连接 QString s 61 s1 43 s2 组包 s 61 QString a 61 1 b 61 2 c 61 3 arg 250 ar
  • QT中16进制二进制字符串的转换

    最近使用串口通信操作nfc卡的扇区内的内容设及到了很多数据类型之间的转换 xff0c 今天总结一下 1 10进制16进制字符串相互显示 10 gt 16 int a 61 10 Qstring b 61 QString 34 1 34 ar
  • 使用vs安装qt插件过程中遇到的问题

    一直在用qtcreater开发程序 最近安装了vs2017 xff0c 想着慢慢改用vs xff0c 毕竟功能强大嘛 按照网上大神的教程安装qt vs tools 过程中遇到了 qt in the given path was built
  • verilog基础语法 {}

    1 的作用 xff1f 起拼接的作用 如 a 61 b 5 b 4 0 意思为 b的最高位和b的低五位拼接起来 xff0c 组成的a为6位 2 数字表达式 4 d15 4 xff1a 代表位宽 d xff1a 代表进制 15 xff1a 代
  • 从程序员的角度,来拆解物联网系统中的开发工作

    物联网的概念已经被炒了好多年了 xff0c 奇怪的是 xff1a 市场中对这个概念的反应总是不愠不火 随着5G 的迅速普及 xff0c 不知道是否能够再次把这个领域带火起来 但是不管怎样 xff0c 很多大学已经把物联网这个专业给坐实了 前
  • amixer命令用于设置系统音量

    该句为 c选择0的声卡 xff08 貌似 xff09 xff0c PCMvolume设置为增加60 2 61 120 xff08 value值变为加上120 xff09 xff0c 60dB 就是减小60 2 61 120 xff0c 如果
  • jetson nano配置远程桌面连接

    一 jetson nano 远程桌面设置 默认jetson nano 的 Desktop Sharing是打不开的需要进行如下配置 xff1a 1 编辑org gnome Vino gschema xml文件 sudo vi span cl
  • 如何修改访问vnc服务器的密码,修改VNC访问的密码

    vncserver iptables I INPUT p tcp dport j ACCEPT 客户端方式 iptables I INPUT p tcp dport j ACCEPT 浏览器方式 vi root vnc xstartup 注
  • sensor配置项解释

    主要介绍 sensor 的配置项 json 里面的 data 类型 都是 10进制的 以 a 43 g sensor 介绍 所有平台特定的配置文件在 JSON 文件顶层均包含 config 组 json 开头的 就是 config 组 这里
  • xp ie清除css缓存,如何清空浏览器的CSS缓存

    项目需求 xff1a 请求一个网站时 xff0c 浏览器会缓存CSS xff0c 导致每次更新网站的代码后 xff0c 不会自动更新样式 xff0c 甚至需要手动去清空浏览器的缓存 xff0c 但是用户不可能每次都清空缓存 xff0c 这就
  • mysql语义分析_简单分析SQL注入语义分析库

    一 前言 这次主要讲开源SQL注入语义分析库libinjection xff0c 如果有发现其他开源SQL语义分析库的欢迎告知 libinjection的程序分析由Simon友情提供 xff0c 需要看完整报告的可以加群看 二 libinj
  • 单片机STM与linux通信,一种STM32单片机与Linux系统高速串口抗干扰通讯方法

    主权项 xff1a 1 一种STM32单片机与Linux系统高速串口抗干扰通讯方法 xff0c 其特征在于 xff1a 它包括一个STM32单片机数据读写步骤和一个Linux系统数据读写步骤 xff0c 所述的STM32单片机数据读写步骤包
  • 树莓派4开发板无屏幕WIFI连接配置

    小白树莓派4开发板安装Raspbian系统教程 xff1a https blog csdn net weixin 42550800 article details 102797542 最近入手了一块树莓派4的开发板 xff0c 图省钱没有买
  • java段注释_Java的注释

    Java的注释 xff1a 注释不是用来执行的 xff0c 是用来给程序员看的 注释不会参与编译也不会参与运行 一共有3种注释 xff1a 1 单行注释 xff0c 通常对某一行代码进行解释说明 语法 xff1a 注释的内容 2 多行注释
  • 员工转正申请书_员工转正申请书

    申请书是个人或集体向组织 机关 企事业单位或社会团体表述愿望 提出请求时使用的一种文书 申请书的使用范围广泛 xff0c 申请书也是一种专用书信 xff0c 它同一般书信一样 xff0c 也是表情达意的工具 下面是小编收集整理的员工转正申请
  • nodemcu刷鸿蒙系统,ESP01S刷入NodeMCU固件

    一开始我看别家的教程的时候走了很多歪路 搞的时候挺困难的 xff0c 花了我大半天 xff0c 但成功之后发现 xff1a 哇 xff0c 其实挺简单一个东西 挺小一个 直入主题 开搞 一 准备工作 1 这里用到USB TTL 某宝10块钱
  • WeDrivePlugin64_24.dll 引发win7系统不能进入桌面

    C Program Files x86 WXDrive extensions x64 WeDrivePlugin64 24 xxx 在命令行模式 修改WeDrivePlugin64 24 dll的文件名为 WeDrivePlugin64 2
  • qgc开发文档_QGC地面站二次开发教程二

    上一次带大家进行了ubuntu下的Q Ground Control安装与编译 xff0c 这次教大家对地面站的页面进行修改 xff0c 对按钮或者页面进行删减 xff0c 如何添加下次再说吧 xff0c 我还没研究明白 一开始打开qgrou
  • 2020-3-24 深度学习笔记15 - 表示学习 1(贪心逐层无监督预训练-目前已经不太使用)

    第十五章 表示学习 官网 英文 很多信息处理任务可能非常容易 xff0c 也可能非常困难 xff0c 这取决于信息是如何表示的 在机器学习中 xff0c 到底是什么因素决定了一种表示比另一种表示更好呢 xff1f 一般而言 xff0c 一个
  • 【从零入门Qt】开发一款属于自己的串口调试助手

    暑假来深圳这边实习 xff0c 做的是嵌入式方向 xff0c 负责人分配给我的第一个任务是用Qt写一个串口调试助手 这个任务总体来讲难度适中 xff0c 尽管我没接触过Qt xff0c 但能查到很多很多的资料 xff0c 甚至包括别人写好的