#QT(串口助手-实现)

news2024/9/28 19:26:41

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,"提示","串口打开成功");
    else
        QMessageBox::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_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    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);    //串口指针赋值给serialport

    connect(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,"提示","串口打开成功");
    else
        QMessageBox::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 serialport

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += 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.0

SOURCES += \
    main.cpp \
    widget.cpp

HEADERS += \
    widget.h

FORMS += \
    widget.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

RESOURCES += \
    tubiao.qrc

 

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

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

相关文章

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(一)-向量扩展编程模型

1. 引言 以下是《riscv-v-spec-1.0.pdf》文档的关键内容&#xff1a; 这是一份关于向量扩展的详细技术文档&#xff0c;内容覆盖了向量指令集的多个关键方面&#xff0c;如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…

CAN总线位时序的介绍

CAN控制器根据两根线上的电位差来判断总线电平。总线电平分为显性电平和隐性电平&#xff0c;二者必居其一。发送方通过使总线电平发生变化&#xff0c;将消息发送给接收方。 显性电平对应逻辑 0&#xff0c;CAN_H 和 CAN_L 之差为 2.5V 左右。而隐性电平对应逻辑 1&#xff0c…

【Datawhale组队学习:Sora原理与技术实战】AIGC技术基础知识

AIGC是什么 AIGC全称叫做AI generated content&#xff0c;AlGC (Al-Generated Content&#xff0c;人工智能生产内容)&#xff0c;是利用AlI自动生产内容的生产方式。 在传统的内容创作领域中&#xff0c;PGC&#xff08;Professionally-generated Content&#xff0c;专业生…

HTTP协议与HTTPS协议

HTTP协议 HTTP协议是一个无状态的协议&#xff0c; 服务器不维护任何有关客户端之前所发请求的消息。 是一种懒政&#xff0c;有状态协议就会更加复杂&#xff0c;需要维护状态&#xff08;历史信息&#xff09;,要是客户或者服务器失效,会产生状态不一致(状态前后不对称),解决…

安装RabbitMQ及配置Centos7 方式(2)

1、背景需求 自行搭建学习参考使用&#xff0c;这里采用的Centos7 方式&#xff0c;这已经是多年前的方式了&#xff0c;现在主流方式是容器化安装、部署&#xff0c;docker、ks8&#xff0c;同学们可自行去学习参考。 2、搭建环境 环境&#xff1a;centos7 、otp_src_21.3、…

Redis中的单线程高性能原因和其他高级命令

单线程 Redis是单线程吗&#xff1f; Redis的单线程主要是指Redis的网络IO和键值对读写是由一个线程来完成的&#xff0c;这也是 Redis对外提供键值存储的主要流程。但Redis的其他功能&#xff0c;比如持久化、异步删除、 集群数据同步等&#xff0c;其实是由额外的线程执行的…

已经连接过github远程库,如何再次推送及删除远程库的内容

基于上次将文件推送到已经建好的github远程库上&#xff0c;此篇文章主要介绍如何再次推送文件去直接已经连接过的远程库&#xff0c;以此如何删除远程库中不想要的文件。 一、推送文件到远程库 1.将所需推送的文件拉入本地库所建的文件夹下&#xff1a;{ex&#xff1a;JVM相…

【剑指offer】C++ 翻转字符串里面的单词

目录 题目&#xff1a; 思路&#xff1a; 代码出现 结果 题目&#xff1a; 给定一个字符串&#xff0c;逐个翻转字符串中的每个单词。 示例 1&#xff1a; 输入: "the sky is blue" 输出: "blue is sky the" 示例 2&#xff1a; 输入: " hello…

电磁兼容(EMC):单、双面PCB板设计要点

目录 1 产品设计原则&#xff1a;性价比为第一要素 2 布局设计要点 3 布线设计要点 4 完整地平面不是最优方案 1 产品设计原则&#xff1a;性价比为第一要素 PCB在电磁兼容设计中通常是要求有完整的地和电源平面。但多层价格让对价格敏感的产品望而却步&#xff0c;只能采…

android开发者工具,最新整理

一 Java相关 1.重载函数的签名(区别是否是重载函数) 答&#xff1a;方法名参数类型参数顺序(返回值不是) 2.finalize的工作原理 答&#xff1a;一旦垃圾收集器准备好释放对象占用的存储空间&#xff0c;它首先调用finalize()&#xff0c;而且只有在下一次垃圾收集过程中&#…

Linux系统:内核参数调优

目录 1、/proc目录 2、sysctl命令 3.1 控制源路由验证 3.2 控制内核的系统请求调试功能 3.3 控制核心转储是否将PID附加到核心文件名 3.4 控制TCP同步cookie的使用 3.5 在网桥上禁用netfilter 3.6 控制消息队列的默认最大大小 3.7 调试TCP内核参数 3.8 调试套…

CSS中 ,有哪些方式可以隐藏页面元素

文章目录 CSS中 &#xff0c;有哪些方式可以隐藏页面元素实现方式display&#xff1a;nonevisibility:hiddenopacity:0设置height 、width属性为0position:absoluteclip-path小结 CSS中 &#xff0c;有哪些方式可以隐藏页面元素 实现方式 通过 css 实现隐藏元素方法有如下 : …

从事测绘地信,你需要这些插件、软件、小工具、图源...

特别声明&#xff0c;本篇是来自公众号GIS前沿的资源&#xff0c;看着比较好&#xff0c;特别给大家推荐。加粗样式 今天&#xff0c;我们又来汇总了一些工作中实用的插件、小工具、数据等等&#xff0c;小助手又来帮你提高工作效率了****。 因为小助手每年都会总结一次&…

python基础——基础语法

文章目录 一、基础知识1、字面量2、常用值类型3、注释4、输入输出5、数据类型转换6、其他 二、字符串拓展1、字符串定义2、字符串拼接3、字符串格式化4、格式化精度控制 三、条件/循环语句1、if2、while3、for循环 四、函数1、函数定义2、函数说明文档3、global关键字 五、数据…

Android开发者必看,我的移动开发春季历程

热修复介绍 1.开发流程 当项目出现紧急bug时&#xff0c;传统的开发流程是发布新版本&#xff0c;引导用户覆盖安装。抛开平台审核上线的时间不说&#xff0c;一天重复下载安装至少两次的用户体验是很差的。而热修复的出现完美解决了这个问题&#xff0c;用户在收到服务器推送…

CentOS部署FastDFS+Nginx并实现远程访问本地服务器中文件

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…

华为昇腾系列——入门学习

概述 昇腾&#xff08;Ascend&#xff09;是华为推出的人工智能处理器品牌&#xff0c;其系列产品包括昇腾910和昇腾310芯片等。 生态情况 众所周知&#xff0c;华为昇腾存在的意义就是替代英伟达的GPU。从事AI开发的小伙伴&#xff0c;应该明白这个替代&#xff0c;不仅仅是…

力扣——盛最多水的容器

题目描述&#xff1a; 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;…

ZYNQ--PS_PL交互(AXI_HP)

AXI_HP接口 通过AXI_HP接口,可直接通过AXI_FULL协议向DDR中通过DMA传输数据。 BD设计 AXI_HP接口设置 AXI_Master代码 module axi_full_master #(parameter C_M_TARGET_SLAVE_BASE_ADDR = 32h40000000,parameter integer C_M_AXI_BURST_LEN = 16,parameter integer …

【送书活动1】基于React低代码平台开发:构建高效、灵活的应用新范式

【送书活动1】基于React低代码平台开发&#xff1a;构建高效、灵活的应用新范式 写在最前面一、React与低代码平台的结合优势二、基于React的低代码平台开发挑战三、基于React的低代码平台开发实践四、未来展望《低代码平台开发实践&#xff1a;基于React》编辑推荐内容简介作者…