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

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI大全-通往AGI之路

背景 自从AI大模型出来之后&#xff0c;就有很多做资源整理的社区&#xff0c;整理学习资料&#xff0c;整理各种AI工具大全&#xff0c;我也整理过一段时间的最新AI的资讯&#xff0c;也曾尝试去弄一个AI的入口类的东西。但是最近看到一个在飞书上的分享&#xff0c;我觉得他…

IDEA自带 .http 请求工具文档

基础语法 请求格式 基础格式 Method Request-URI HTTP-Version Header-field: Header-valueRequest-Body其中&#xff0c;GET 请求可以省略 Method 不写&#xff1b;HTTP-Version 可以省略不写&#xff0c;默认使用 1.1 版本。 示例&#xff1a; GET https://www.baidu.co…

【Python】成功解决TypeError: list indices must be integers or slices, not float

【Python】成功解决TypeError: list indices must be integers or slices, not float &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&…

GIS之深度学习05:VisualStudio安装教程

在安装CUDA前&#xff0c;建议先安装VisualStudio&#xff0c;以防报错 VisualStudio安装步骤简单&#xff0c;但时间较长。。。。。。 正文开始&#xff1a; VisualStudio官网&#xff1a;Visual Studio: IDE and Code Editor for Software Developers and Teams 点击右上角…

【Docker】若依后端项目搭建

一 搭建局域网 1 # 搭建net-ry局域网&#xff0c;用于部署若依项目docker network create net-ry --subnet172.68.0.0/16 --gateway172.68.0.1 # 注意1&#xff1a;关闭宿主机的防火墙&#xff0c;否者容器内部的MySQL、redis等服务&#xff0c;外部访问不了&#xff1b;开放…

Stream流(Java)

目录 一、介绍 二、Stream流的使用步骤 三、Stream流常见的中间方法 四、Stream流常见的终结方法 一、介绍 Stream也叫Stream流&#xff0c;是JDK8开始新增的一套API&#xff0c;可以用于操作集合或者数组的数据。 优势&#xff1a;Stream流大量的结合了Lambda的语法风格来…

【PHP】PHP实现与硬件串口交互,向硬件设备发送指令数据(下)

目录 一、前言 二、 效果图 三、安装PHP扩展 四、添加模拟串口 五、PHP发送数据给硬件 PHP代码 前端代码 一、前言 上篇文章写到PHP怎么与硬件串口交互之实时接收硬件发送的数据&#xff0c;这里同样是以天平为例&#xff0c;介绍怎么向硬件设备发送数据&#xff0c; 需…

MySQL高可用性攻略:快速搭建MySQL主从复制集群 !

MySQL高可用性攻略&#xff1a;快速搭建MySQL主从复制集群 &#xff01; MySQL基础知识&#xff1a;介绍MySQL数据库的基本概念和常用命令&#xff0c;如何创建数据库、表、用户和权限管理等。 MySQL安装教程&#xff1a;Centos7 安装MySQL5.7.29详细安装手册 MySQL数据类型&…

【仿真基本功】【PyTorch】从头安装PyTorch(GPU版本)【2024/03/03更新】

【仿真基本功】【PyTorch】从头安装PyTorch&#xff08;GPU版本&#xff09;【2024/03/03更新】 安装步骤1. 安装Anaconda2. 查看显卡对CUDA版本的支持3. 查看PyTorch的安装需求4. 安装PyTorcha) 配置新环境b) 进入新环境c) 按照CUDA版本要求&#xff0c;必须小于等于显卡支持的…

初学arp欺骗

首先准备一台靶机这里用虚拟机的win10 已知网关与ip地址&#xff08;怕误伤&#xff09; 现在返回kali从头开始 首先探测自己的网关 然后扫内网存活的ip 发现有3台 用nmap扫一下是哪几台 成功发现我们虚拟机的ip 现在虚拟机可以正常访问网络 接下来直接开梭 ip网关 返回虚拟机…

# 自然语言处理: 第十三章P-tuing系列之P-tuning V1

项目地址: P-Tuning 论文地址: [2103.10385] GPT Understands, Too (arxiv.org) 理论基础 正如果上一节介绍LoRA(自然语言处理: 第十二章LoRA解读_lora自然英语处理-CSDN博客)一样,本次介绍的在21年由清华团推提出来的 P-Tuning V1系列也属于PEFT(参数高效微调系列)里的一种&…

重庆有哪些媒体资源?活动展会媒体邀约

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 重庆作为中国的一个直辖市&#xff0c;拥有丰富的媒体资源&#xff0c;涵盖电视台、广播电台、报纸、杂志以及网络媒体等各个领域。这些媒体不仅是传播新闻和信息的重要渠道&#xff0c;…

Elasticsearch:向量相似度计算 - 可笑的速度

作者&#xff1a;Chris Hegarty 任何向量数据库的核心都是距离函数&#xff0c;它确定两个向量的接近程度。 这些距离函数在索引和搜索期间执行多次。 当合并段或在图表中导航最近邻居时&#xff0c;大部分执行时间都花在比较向量的相似性上。 对这些距离函数进行微观优化是值…

昇腾芯片解析:华为自主研发的人工智能处理器全面分析

在当今科技发展的浪潮中&#xff0c;昇腾芯片作为一种新兴的处理器&#xff0c;正引起广泛的关注和讨论。升腾芯片究竟是由哪家公司生产的&#xff1f;这个问题一直困扰着许多人。下面小编将全面介绍、分析升腾芯片的生产商及各类参数、应用&#xff0c;以便读者对其有更全面的…

【神经网络与深度学习】时间卷积网络(TCN)

概述 时间卷积网络&#xff08;Temporal Convolutional Network&#xff0c;TCN&#xff09;是一种用于处理时序数据的深度学习模型。它基于卷积神经网络&#xff08;CNN&#xff09;的思想&#xff0c;通过卷积操作来提取和学习时序数据中的特征&#xff0c;并在一系列时序预…

MyCAT学习——在openEuler22.03中安装MyCAT2(网盘下载版)

准备工作 因为MyCAT 2基于JDK 1.8开发。也需要在虚拟机中安装JDK&#xff08;JDK官网就能下载&#xff0c;我这提供一个捷径&#xff09; jdk-8u401-linux-x64.rpmhttps://pan.baidu.com/s/1ywcDsxYOmfZONpmH9oDjfw?pwdrhel下载对应的tar安装包,以及对应的jar包 安装程序包…

C++:Vector的模拟实现

创作不易&#xff0c;感谢三连 &#xff01;&#xff01; 一&#xff0c;前言 在学习string类的时候&#xff0c;我们可能会发现遍历的话下标访问特别香&#xff0c;比迭代器用的舒服&#xff0c;但是下标其实只能是支持连续的空间&#xff0c;他的使用是非常具有局限性的&am…

开发一套小程序所需的费用取决于多个因素

随着移动互联网的发展&#xff0c;小程序已经成为许多企业和个人推广业务和服务的重要工具。 不过&#xff0c;对于很多想要开发小程序的人来说&#xff0c;最大的疑问就是开发一套小程序要花多少钱。 这个问题的答案并不是固定的&#xff0c;因为开发一个小程序的成本取决于几…

Linux 学习笔记(12)

十二、 系统服务 1 、系统服务分类&#xff0c;根据其使用的方法来分&#xff0c;可以被分为三类 a、由 init 控制的服务&#xff1a;基本都是系统级别的服务&#xff0c;运行级别这一章讲的就是这一类的服务 b、由 System V 启动脚本启动的服务&#xff1a;和我们打交道最多…

紧跟潮流,再整一个短剧搜索网站

前面一大批的转存量太大了&#xff0c;有些小伙伴用不上&#xff0c;所以整了个搜索网站&#xff0c;输入关键词搜索即可。 搜短剧 http://wjsyyx.top/sdj/ 界面依旧主打朴实无华&#xff0c;搜索一步到位。 ▼ 网站界面 ▼ 搜索结果 剩下的就都会了。 ▼ 往期推荐 【Python】…