#QT(串口助手-实现)

1.IDE:QTCreator


2.实验


3.记录

(1)在widget.h中加入必要文件,并且定义一个类指针

 

 (2)如果有类的成员不知道怎么写,可以通过以下途径搜索

(2)设置串口数据

void Widget::on_open_pb_clicked()       //当打开串口按下时
{QSerialPort::BaudRate buadrate;    // ::为作用域,定义波特率QSerialPort::DataBits databits;    //定义数据位QSerialPort::StopBits stopbits;   //定义停止位QSerialPort::Parity   checkbits;   //定义校验位
/******************波特率赋值******************************/if(ui->baudrate_cb->currentText()=="115200")buadrate=QSerialPort::Baud115200;else if(ui->baudrate_cb->currentText()=="9600")buadrate=QSerialPort::Baud9600;else if(ui->baudrate_cb->currentText()=="4800")buadrate=QSerialPort::Baud4800;
/******************数据位赋值*******************************/if(ui->data_cb->currentText()=="8")databits=QSerialPort::Data8;else if(ui->data_cb->currentText()=="7")databits=QSerialPort::Data7;else if(ui->data_cb->currentText()=="6")databits=QSerialPort::Data6;else if(ui->data_cb->currentText()=="5")databits=QSerialPort::Data5;
/*******************停止位赋值******************************/if(ui->stop_cb->currentText()=="1")stopbits=QSerialPort::OneStop;else if(ui->stop_cb->currentText()=="1.5")stopbits=QSerialPort::OneAndHalfStop;else if(ui->stop_cb->currentText()=="2")stopbits=QSerialPort::TwoStop;
/******************校验位赋值******************************/checkbits=QSerialPort::NoParity;         //因为强制选择无校验位
/******************设置串口*******************************/serialport->setPortName(ui->com_cb->currentText());    //设置串口名serialport->setBaudRate(buadrate);      //设置波特率serialport->setDataBits(databits);      //设置数据位serialport->setStopBits(stopbits);      //设置停止位serialport->setParity(checkbits);       //设置校验位if(serialport->open(QIODevice::ReadWrite)==true)    //串口打开成功QMessageBox::information(this,"提示","串口打开成功");elseQMessageBox::critical(this,"警告","串口打开失败");
}

(3)将串口打开与串口关闭通过槽函数关联按钮(QMessageBox用于提示)

void Widget::on_close_pb_clicked()      //当关闭窗口按钮按下时
{serialport->close();QMessageBox::information(this,"提示","串口已经关闭");
}

 (4)关联准备读函数(函数部分widget前应该有void)

/*************************准备读函数*************************/
void Widget::SerialPort_ReadyRead_Slot()
{QString receive_buff;                   //定义一个数组,存放接收到的内容receive_buff=QString(serialport->readAll());ui->receive_line->appendPlainText(receive_buff);   //将接收到的内容在接收区显示出来
}

(5)发送函数关联

void Widget::on_send_pb_clicked()
{serialport->write(ui->send_line->text().toLocal8Bit().data());  //将发送区内容转换为8bit发送出去
}

 (6)清空函数关联

void Widget::on_clear_pb_clicked()    //当清空按钮按下时
{ui->receive_line->clear();
}

(7)运行效果 


4.代码

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include "QSerialPort"      //加入文件QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();QSerialPort *serialport;        //定义一个QserialPort类的指针
private slots:void on_open_pb_clicked();void on_close_pb_clicked();void SerialPort_ReadyRead_Slot();   //准备读信号函数声明void on_send_pb_clicked();void on_clear_pb_clicked();private:Ui::Widget *ui;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include "QSerialPortInfo"   //引入必要的serial文件
#include "QMessageBox"      //消息提示
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QStringList serialNamePort;       //定义一个数组serialport = new QSerialPort(this);    //串口指针赋值给serialportconnect(serialport,SIGNAL(readyRead()),this,SLOT(SerialPort_ReadyRead_Slot()));  //关联准备读信号foreach (const QSerialPortInfo &info ,QSerialPortInfo::availablePorts()) {      //自动搜索当前串口serialNamePort<<info.portName();      //将返回值加载入数组}ui->com_cb->addItems(serialNamePort);     //将搜索的串口加入UI界面
}Widget::~Widget()
{delete ui;
}
/*************************准备读函数*************************/
void Widget::SerialPort_ReadyRead_Slot()
{QString receive_buff;                   //定义一个数组,存放接收到的内容receive_buff=QString(serialport->readAll());       //将接收到的数据转换为QString类型ui->receive_line->appendPlainText(receive_buff);   //将接收到的内容在接收区显示出来
}void Widget::on_open_pb_clicked()       //当打开串口按下时
{QSerialPort::BaudRate buadrate;    // ::为作用域,定义波特率QSerialPort::DataBits databits;    //定义数据位QSerialPort::StopBits stopbits;   //定义停止位QSerialPort::Parity   checkbits;   //定义校验位
/******************波特率赋值******************************/if(ui->baudrate_cb->currentText()=="115200")buadrate=QSerialPort::Baud115200;else if(ui->baudrate_cb->currentText()=="9600")buadrate=QSerialPort::Baud9600;else if(ui->baudrate_cb->currentText()=="4800")buadrate=QSerialPort::Baud4800;
/******************数据位赋值*******************************/if(ui->data_cb->currentText()=="8")databits=QSerialPort::Data8;else if(ui->data_cb->currentText()=="7")databits=QSerialPort::Data7;else if(ui->data_cb->currentText()=="6")databits=QSerialPort::Data6;else if(ui->data_cb->currentText()=="5")databits=QSerialPort::Data5;
/*******************停止位赋值******************************/if(ui->stop_cb->currentText()=="1")stopbits=QSerialPort::OneStop;else if(ui->stop_cb->currentText()=="1.5")stopbits=QSerialPort::OneAndHalfStop;else if(ui->stop_cb->currentText()=="2")stopbits=QSerialPort::TwoStop;
/******************校验位赋值******************************/checkbits=QSerialPort::NoParity;         //因为强制选择无校验位
/******************设置串口*******************************/serialport->setPortName(ui->com_cb->currentText());    //设置串口名serialport->setBaudRate(buadrate);      //设置波特率serialport->setDataBits(databits);      //设置数据位serialport->setStopBits(stopbits);      //设置停止位serialport->setParity(checkbits);       //设置校验位if(serialport->open(QIODevice::ReadWrite)==true)    //串口打开成功QMessageBox::information(this,"提示","串口打开成功");elseQMessageBox::critical(this,"警告","串口打开失败");
}void Widget::on_close_pb_clicked()      //当关闭窗口按钮按下时
{serialport->close();QMessageBox::information(this,"提示","串口已经关闭");
}void Widget::on_send_pb_clicked()      //当发送按钮按下时
{serialport->write(ui->send_line->text().toLocal8Bit().data());  //将发送区内容转换为8bit发送出去
}void Widget::on_clear_pb_clicked()    //当清空按钮按下时
{ui->receive_line->clear();
}

 pro文件(只加入了serialport,以及自动加入的图标文件)

QT       += core gui serialportgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++17# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \widget.cppHEADERS += \widget.hFORMS += \widget.ui# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += targetRESOURCES += \tubiao.qrc

 

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

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

相关文章

贪心算法练习题(最小化战斗力差距、谈判、纪念品分组、分糖果)

目录 一、贪心算法的介绍 二、贪心算法的实现步骤 三、最小化战斗力差距 四、谈判 五、纪念品分组 六、分糖果 一、贪心算法的介绍 贪心的基本原理:每一步都选择局部最优解&#xff0c;而尽量不考虑对后续的影响&#xff0c;最终达到全局最优解。 贪心的局限性:贪心算法…

.Net利用Microsoft.Extensions.DependencyInjection配置依赖注入

一、概述 为了让接口程序更加模块化和可测试&#xff0c;采用依赖注入的方式调用接口方法。 二、安装Microsoft.Extensions.DependencyInjection 在NuGet里面搜索Microsoft.Extensions.DependencyInjection&#xff0c;并进行安装。 三、代码编写 3.1 创建Service 实现类…

Windows Docker 部署 MySQL

部署 MySQL 打开 Docker Desktop&#xff0c;切换到 Linux 容器。然后在 PowerShell 执行下面命令&#xff0c;即可启动一个 MySQL 服务。这里安装的是 8.3.0 Tag版本&#xff0c;如果需要安装其他或者最新版本&#xff0c;可以到 Docker Hub 进行查找。 docker run -itd --n…

http【详解】状态码,方法,接口设计 —— RestfuI API,头部 —— headers,缓存

http 状态码 1xx 服务器收到请求 2xx 请求成功 200 成功 3xx 重定向&#xff08;目标服务器返回另一个服务器的地址&#xff0c;浏览器会自动去访问另一个服务器&#xff09; 常见应用场景&#xff1a;搜索引擎&#xff0c;短网址 301 永久重定向 &#xff08;常用于已停服的…

网络协议栈--应用层--HTTPS协议

目录 一、HTTPS协议原理1.1 HTTPS协议是什么&#xff1f;1.2 概念准备1.2.1 什么是“加密”&#xff1f;1.2.2 为什么要加密&#xff1f;1.2.3 常见的加密方式1.2.3.1 对称加密1.2.3.2 非对称加密 1.2.4 数据摘要&&数据指纹1.2.5 数字签名1.2.6 理解链-承上启下 1.3 HT…

软考59-上午题-【数据库】-小结+杂题

一、杂题 真题1&#xff1a; 真题2&#xff1a; 真题3&#xff1a; 真题4&#xff1a; 真题5&#xff1a; 真题6&#xff1a; 真题7&#xff1a; 真题8&#xff1a; 二、数据库总结 考试题型&#xff1a; 1、选择题&#xff08;6题&#xff0c;6分&#xff09; 2、综合分析题…

AutoGPT实现原理

AutoGPT是一种利用GPT-4模型的自动化任务处理系统&#xff0c;其主要特点包括任务分配、多模型协作、互联网访问和文件读写能力以及上下文联动记忆性。其核心思想是通过零样本学习&#xff08;Zero Shot Learning&#xff09;让GPT-4理解人类设定的角色和目标&#xff0c;并通过…

Golang Channel 详细原理和使用技巧

1.简介 Channel(一般简写为 chan) 管道提供了一种机制:它在两个并发执行的协程之间进行同步&#xff0c;并通过传递与该管道元素类型相符的值来进行通信,它是Golang在语言层面提供的goroutine间的通信方式.通过Channel在不同的 goroutine中交换数据&#xff0c;在goroutine之间…

Vue.js学习笔记(四)抽奖组件封装——九宫格抽奖

基于VUE2九宫格组件的开发 文章目录 基于VUE2九宫格组件的开发前言一、开发步骤1.数据准备2.页面布局3.事件方法 二、最终效果总结 前言 由于业务需求&#xff0c;需要手动开发九宫格抽奖组件&#xff0c;特此记录学习宫格组件开发。 一、开发步骤 1.数据准备 data 代码如下&…

抽象步骤条(2.0版本)

vue3 router ele-plus 猜猜看为什么使用组件库&#xff01; 他呀的&#xff01;查看密码要自己写&#xff0c;验证信息也要自己写&#xff0c;所以说会用组件库会轻松一点&#xff0c;&#xff0c;&#xff0c; 代码如下 <template><div class"main"&g…

智能驾驶规划控制理论学习06-基于优化的规划方法之数值优化基础

目录 一、优化概念 1、一般优化问题 2、全局最优和局部最优 二、无约束优化 1、无约束优化概述 2、梯度方法 通用框架 线性搜索 回溯搜索 3、梯度下降 基本思想 实现流程 ​4、牛顿法 基本思想 实现流程 5、高斯牛顿法 6、LM法&#xff08;Le…

构建可视化工具选择策略

更多的信息总是意味着更好的结果吗&#xff1f;这完全取决于项目所处的环境。 以烘焙为例。当你做蛋糕时&#xff0c;你的原材料经历了许多化学变化和烹制过程。如果任何一个环节出现问题&#xff0c;蛋糕就做不好。但这并不意味着你需要理解食材在分子级别上发生了什么&#…