QT--收发数据代码

2023-11-15

(1).pro

QT       += core gui
QT       += serialport
QT       += widgets
QT       += core

(2).h

#ifndef JTLTESTTOOL_H
#define JTLTESTTOOL_H

#include <QDialog>

/*-----------------------------user-------------------------------------*/
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QDebug>
#include <QPushButton>
#include <QMessageBox>
#include <QString>
#include <QByteArray>
#include <QDateTime>
#include <typeinfo>


QT_BEGIN_NAMESPACE
namespace Ui { class JTLTestTool; }
QT_END_NAMESPACE

class JTLTestTool : public QDialog
{
    Q_OBJECT

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

private:
    Ui::JTLTestTool *ui;
/*------------------------------------------------------------------*/
//**模块名称:自定义函数类
//**功能:
//**输入参数:
//**输出参数:
/*------------------------------------------------------------------*/
//初始化,自动获取当前可用串口
void system_init();
//打开串口
void btn_open_clicked ();
//关闭串口
void btn_close_clicked ();
//发送数据
void btn_send_clicked ();
//接收数据
void recive_data ();
//清除接收区
void clear_recive_data ();
//刷新串口
void refresh_clicked ();

/*------------------------------------------------------------------*/
//**模块名称:
//**功能:
//**输入参数:
//**输出参数:
/*------------------------------------------------------------------*/

QSerialPort myserialport;

};
#endif // JTLTESTTOOL_H

().cpp

#include "jtltesttool.h"
#include "ui_jtltesttool.h"


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


 /*---------------------------user----------------------------------------*/
    system_init();
    //刷新串口
    connect(ui->btn_refresh,&QPushButton::clicked,this,&JTLTestTool::refresh_clicked);
    //打开串口
    connect(ui->btn_open,&QPushButton::clicked,this,&JTLTestTool::btn_open_clicked);
    //关闭串口
    connect(ui->btn_close,&QPushButton::clicked,this,&JTLTestTool::btn_close_clicked);
    //发送数据
    connect(ui->btn_send,&QPushButton::clicked,this,&JTLTestTool::btn_send_clicked);
    //接收数据
    connect(&myserialport,&QSerialPort::readyRead,this,&JTLTestTool::recive_data);
    //清除接收区数据
    connect(ui->btn_clearrecive,&QPushButton::clicked,this,&JTLTestTool::clear_recive_data);
}

JTLTestTool::~JTLTestTool()
{
    delete ui;

}
/*------------------------------------------------------------------*/
//**函数名:system_init()
//**功能:初始化串口信息,获取可用串口并显示
//**输入参数:
//**输出参数:
/*------------------------------------------------------------------*/
void JTLTestTool::system_init()
{
    //“关闭”按钮失能
    ui->btn_close->setEnabled(false);
    //获取可用串口
    foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
    {
        QSerialPort serial;
        serial.setPort(info);
        ui->comboBox_serailport->addItem(serial.portName());
        serial.close();
    }
}

/*------------------------------------------------------------------*/
//**函数名:btn_open_clicked()
//**功能:打开串口,并配置串口信息
//**输入参数:
//**输出参数:
/*------------------------------------------------------------------*/
void JTLTestTool::btn_open_clicked ()
{
    //关闭按钮使能
    ui->btn_close->setEnabled(true);
    //打开按钮失能
    ui->btn_open->setEnabled(false);
    //设置串口号
    myserialport.setPortName(ui->comboBox_serailport->currentText());
    //以读写模式打开
    if(myserialport.open(QIODevice::ReadWrite))
    {
        //配置串口信息
        myserialport.setBaudRate(QSerialPort::Baud9600);
        myserialport.setParity(QSerialPort::NoParity);
        myserialport.setDataBits(QSerialPort::Data8);
        myserialport.setStopBits(QSerialPort::OneStop);
        myserialport.setFlowControl(QSerialPort::NoFlowControl);
        qDebug()<<"串口打开";
    }
    else
    {
       QMessageBox msgBox;
       msgBox.setText("串口打开失败!");
       msgBox.exec();
    }

}
/*------------------------------------------------------------------*/
//**函数名:btn_close_clicked ()
//**功能:关闭串口
//**输入参数:
//**输出参数:
/*------------------------------------------------------------------*/
void JTLTestTool::btn_close_clicked ()
{
    //关闭按钮失能
    ui->btn_close->setEnabled(false);
    //打开按钮使能
    ui->btn_open->setEnabled(true);
    //关闭串口
    myserialport.close();
    qDebug()<<"串口关闭";
}
/*------------------------------------------------------------------*/
//**函数名:btn_send_clicked ()
//**功能:发送数据
//**输入参数:
//**输出参数:
/*------------------------------------------------------------------*/
void JTLTestTool::btn_send_clicked ()
{
    // recive_data();
    //获取要发送的数据
    QByteArray senddata = ui->lineEdit_send->text().toUtf8();
    //发送数据
    myserialport.write(senddata);
    qDebug() << senddata;

}
/*------------------------------------------------------------------*/
//**函数名: recive_data ();
//**功能:接收并显示数据
//**输入参数:
//**输出参数:
/*------------------------------------------------------------------*/
void JTLTestTool::recive_data ()
{
    qDebug() << "开始接收";
    //接收数据
    QByteArray recivedata =  myserialport.readAll();
    //获取系统时间
    QString datatime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz");
    //显示接收到的数据,并显示接收时间
    ui -> plainTextEdit_recive ->appendPlainText(datatime+"接收:"+recivedata);
     //QString type1 = typeid (recivedata).name();
    // qDebug() << type1;
}
/*------------------------------------------------------------------*/
//**函数名: clear_recive_data();
//**功能:接收并显示数据
//**输入参数:
//**输出参数:
/*------------------------------------------------------------------*/
void JTLTestTool::clear_recive_data ()
{
    ui->plainTextEdit_recive->clear();
}

/*------------------------------------------------------------------*/
//**函数名:refresh_clicked ()
//**功能:刷新串口,显示可用串口
//**输入参数:
//**输出参数:
/*------------------------------------------------------------------*/
void JTLTestTool::refresh_clicked ()
{
    //清除串口显示
    ui->comboBox_serailport->clear();
    //获取可用串口
    foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
    {
        QSerialPort serial;
        serial.setPort(info);
        QString portname = ui->comboBox_serailport->currentText();
        //判断可用串口是否已显示
        if(portname != serial.portName())
        {
            ui->comboBox_serailport->addItem(serial.portName());
            serial.close();
        }

    }
}

(4)main.cpp

#include "jtltesttool.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    JTLTestTool w;
    w.show();
    return a.exec();
}

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

QT--收发数据代码 的相关文章

  • QSerialPort 中的 readAll() 不包括最后发送的响应

    我正在使用 Qt 来控制串行设备 如果我向串行设备发送命令 我会执行类似的操作serial gt write command r n 我制作了一个按钮 它将纯文本小部件内的文本更改为串行端口的响应 为了获得串口的响应 我使用serial g
  • Qt-Qlist 检查包含自定义类

    有没有办法覆盖加载自定义类的 Qt QList 的比较机制 即在 java 中你只需要重写一个比较方法 我有一个带有我的自定义类模型的 QList QList
  • 在高 dpi Windows 平台上自动重新缩放应用程序?

    我正在编写一个需要在高 dpi Windows 192dpi 而不是 96dpi 上运行的 Qt 应用程序 不幸的是 Qt 框架尚不支持高 dpi 至少在 Windows 上 因此我的应用程序及其所有元素看起来只有应有尺寸的一半 有没有办法
  • 如何将 zlib 添加到现有的 qt 安装中

    如何将 zlib 添加到 Qt 的现有安装中 我对此很陌生 所以请给我详细的描述 提前感谢您的帮助 zlib 包含在 Qt 核心库中 如果你想在 Qt 程序中使用 zlib 函数 你只需要包含 src 3rdparty zlib 中的 zl
  • 如何向同一个 QMenu 添加多个 QAction?

    我正在尝试实现 Qt 菜单自定义 并且我提供了一个功能来添加相同的功能QAction在同一个人民币上下文菜单中多次 但是当我尝试这样做时 myMenu gt addAction myAction myMenu gt addAction my
  • Mac 上的 Qt — 如何访问帮助菜单中的“搜索”

    我正在将我的 Qt 应用程序移植到 Mac OS X 在 Windows Linux 上 我使用 QLineEdit 在帮助菜单中提供搜索功能 In Mac OS X I saw something like this is built i
  • 安装J语言的JQt IDE,出现错误

    我一直按照这里的说明进行操作 http code jsoftware com wiki System Installation Linux http code jsoftware com wiki System Installation L
  • 为什么 QGraphicsWidget 的选择边框在 QGraphicsScene 中不可见?

    我已经通过一个小部件添加到图形场景 QGraphicSscene QGraphicsProxyWidget 问题是 当我选择该项目时 它被选中 但选择边框不可见 这是代码 QDial dial new QDial Widget dial g
  • 在 Qthread 中运行函数 - 应用程序将挂起

    我在 QT 内部线程方面遇到一些问题 include
  • 如何在qt中创建正确的退出按钮

    我正在尝试创建一个退出按钮来正确关闭我在 QT 中制作的 GUI 我尝试通过以下方式执行此操作 include
  • 使用嵌入qt的mysql?

    我正在尝试使用嵌入 QT 的 mysql 我已经有一个与 mysqld 链接的 Qt mysql 插件 该插件可以很好地加载嵌入式数据库 但 QT 没有简单的方法来设置 dataDir 等嵌入式选项 我在这里看到 http doc qt i
  • 扩展 TabViewStyle styleData

    我目前正在尝试找到一种更好的方法来执行此操作 将图标添加到选项卡 现在 我正在放弃 styleData title 以包含图标源 但如果能够扩展 styleData 就更好了 这样我就可以包含其他自定义属性 这是我当前的黑客 Tab tit
  • 如何使用 ClangCodeModel 插件在 QtCreator 中设置 C++ 标准?

    抱歉 如果这是一个愚蠢的问题 但我已经尝试了几乎所有的方法 现在正在用头撞墙 问题是 带有 Clang 代码模型插件的 QtCreator 4 8 0 beta for Windows 解析我的项目 为 C 98 而实际上它是 C 17 但
  • QWinTaskbarProgress 不会显示

    我使用的是windows7和Qt5 3 0 我在 MainWindow 的构造函数中添加了以下内容 但任务栏上没有显示任何内容 我错过了什么 QWinTaskbarProgress pTaskbarProgress new QWinTask
  • 如何在 Qt-Creator 中添加自定义构建步骤?

    构建我的应用程序后 我想将其复制到特定目录 在 Windows 7 上 自定义构建步骤 cmd exe c k copy MyPlugin dll HostApp Debug plugins 但我有错误 Can t run process
  • QFileDialog 作为 TableView 的编辑器:如何获取结果?

    我正在使用一个QFileDialog作为某些专栏的编辑QTableView 这基本上有效 对一些焦点问题取模 请参阅here https stackoverflow com questions 22854242 qfiledialog as
  • 如何使用 qt 库中的调试符号为 qt 5.5 创建开发 shell

    我有一个开发外壳buildInputs条目包括qt55 qtbase 这很好用 今天 我在 qt 库中发生了段错误 我想要带有调试符号的 qt 库 我看了一下nixpkgs pkgs development libraries qt 5 5
  • 如何重写(重新实现)QFileSystemModel 中的成员函数

    我已经为此苦苦挣扎了一段时间 Qt s QFileSystemModel由于图标获取算法非常糟糕 在获取数百个文件时速度非常慢 我想完全禁用图标 它们被提取到QFileSystemModel data方法不是虚拟的 QFileSystemM
  • qt 如何知道按钮被点击?

    我正在尝试编写一个程序 用声音进行一些操作 我的问题是我有 3 个播放按钮和 3 个标签 我希望无论我单击 播放 按钮 都应该播放按钮附近标签中名称的声音 我有一个没有任何参数的播放插槽 那么 如何分别连接到每个播放按钮和每个标签呢 实际上
  • Qt - QProcess 不工作

    我尝试启动 Internet Explorer 所以我使用下面的代码 QProcess process new QProcess this QString temp C Program Files Internet Explorer iex

随机推荐

  • 折线图横坐标怎么设置_Excel折线图的横坐标如何设置?方法超简单,赶快学起来...

    在我们平时使用Excel表格来进行各种数据的编辑工作时 我们往往会因为某一些实际的需求 需要在表格当中插入一些图表 以此来更加清晰 直观的展现此时表格数据当中的内容 而在Excel表格当中插入折线图 相信这是很多小伙伴都会做的工作 尤其是想
  • TCL变量

    目录 简单变量 数组 相关命令 set unset append和incr 简单变量 一个 TCL 的简单变量包含两个部分 名字和值 名字和值都可以是任意字符串 例如一个名为 1323 7 hdgg 的变量在 TCL 中都是合法的 不过为了
  • SSD,PCI-E,NVMe,M.2分类详解

    SSD PCI E NVMe M 2分类详解 首先说一下目前固态硬盘常用的两个接口 与主板相连的接口形状 SATA3和M 2 1 采用SATA3接口 目前机械硬盘采用的接口方式 的固态硬盘 在传输方式上与SATA3 的机械硬盘一样 速度的提
  • 如何使用Pandas的ExcelWriter进行excel操作

    pandas ExcelWriter定制格式 定制表头 渲染颜色等 非ExcelWriter标准的创建模式 ExcelWriter这个插件有个坑 就是已经设置好的格式是无法更改的 因此 由pandas转成excel的时候 必须将格式清除 尤
  • scanf语句的使用和执行原理

    scanf语句的使用和执行原理 1 如何使用scanf 2 scanf语句的原理 1 如何使用scanf d说明我们现在要读入一个整数了 scanf这个函数会读入一个整数 读到的结果赋值给指定变量 要注意指定变量前面的 scanf d pr
  • VUE中使用高德地图(原生UI,信息窗体内部事件监听)

    VUE中使用高德地图 原生UI 先吐槽一下 本人的环境是基于vue3 0的项目 上一位参与项目的同事使用的事vue amap 因工作需要 另外一位同事去了别的项目 所以这个万恶的项目由本人自己维护 就是再本周新增了需求 根据不用大区的用户进
  • ruoyi若依mybatis升级为mybatis-plus

    一 添加mybatis plus依赖 删除mybatis依赖 根目录下的pom文件 更改前
  • 高可用性H.A.(High Availability)

    高可用性 H A High Availability 指的是通过尽量缩短因日常维护操作 计划 和突发的系统崩溃 非计划 所导致的停机时间 以提高系统和应用的可用性
  • html / css 基础面试题 --- 页面导入时,使用link与@import有什么区别?

    页面导入时 使用link与 import有什么区别 标签和 import指令都可以用于在HTML文档中导入CSS样式表 尽管它们都可以实现相同的目的 但它们之间还是存在一些差异 1 加载顺序 当浏览器解析到标签时 会立即下载并应用样式表 这
  • Sigmoid函数使用教程

    Sigmoid函数是一种常用的激活函数 它将输入值映射到一个范围在0到1之间的连续输出 Sigmoid函数的公式如下 scss f x 1 1 exp x 以下是使用Sigmoid函数的Python示例代码 pythonCopy code
  • 六、MATLAB入门—文件操作

    文章目录 前言 一 文件的打开与关闭 1 1 文件的打开 1 2 文件的关闭 二 文件的读写操作 2 1 二进制文件的读写操作 2 2 文本文件的读写操作 三 数据文件定位 总结 前言 经过前面一段时间的学习 相信大家已经能较为熟练的在MA
  • Mini AHRS 姿态解算说明

    本文旨在讲解以下内容 1 加速度 2 陀螺仪 3 磁力计 0 序言 一直想写篇文章关于姿态解算原理的 使用尽量通俗的语句说明如何从加速度计和陀螺仪的数据 融合得到载体的姿态角 无奈自己的水平有限 一直搁置 淡泊以明志 宁静以致远 人总是要逼
  • 计算机网络实验报告 静态路由的配置

    实验名称 静态路由的配置 一 实验目的 1 掌握路由器的配置 2 学会配置静态路由 3 实现静态路由的不同网络间的互通 二 实验内容 1 搭建拓扑图 2 网络拓扑节点IP配置 3 静态路由配置实现不同网络的通信 三 实验环境 GNS3是一款
  • 七大排序之归并排序

    文章目录 什么是归并排序 归并排序代码 归并排序相关习题 148 排序链表 剑指 Offer 51 数组中的逆序对 总结 什么是归并排序 归并排序的思想 将原数组不断拆分 一直拆到每个子数组只有一个元素时 第一阶段结束 然后开始 并 将相邻
  • Databend 开源周报第 110 期

    Databend 是一款现代云数仓 专为弹性和高效设计 为您的大规模分析需求保驾护航 自由且开源 即刻体验云服务 https app databend cn What s On In Databend 探索 Databend 本周新进展 遇
  • 踩坑日记(一)

    1 Vue 错误 Uncaught TypeError Object is not a function at eval vue router esm bundler js vue router版本太高了 需降低版本 降为 3 5 3 可参
  • VUE3 之 条件渲染

    目录 1 概述 2 条件渲染 3 综述 4 个人公众号 1 概述 老话说的好 要锻炼逆向思维 人取我弃 人弃我取 言归正传 今天我们来聊聊 VUE3 的条件渲染 2 条件渲染 2 1 v if div div
  • 全手工杂拌面——韩国才有的中华料理 冬至餐桌上的25道家常手工主食

    这是一道韩国特有的中餐 全手工海鲜杂拌面 面条以鸡蛋 面粉和成 不加一滴水 汤则由鸡骨头经过数小时熬制而成的汤底制作而成 从汤到面一律手工打造 彻底抛弃了现成的面条 速食的鸡汤 符合眼下反对快餐食品 提倡有个性及营养均衡的传统美食的慢食文化
  • MySQL-高级处理

    第五章 SQL高级处理 5 1 窗口函数 5 1 1 窗口函数概念及基本的使用方法 窗口函数也称为OLAP函数 OLAP 是 OnLine AnalyticalProcessing 的简称 意思是对数据库数据进行实时分析处理 为了便于理解
  • QT--收发数据代码

    1 pro QT core gui QT serialport QT widgets QT core 2 h ifndef JTLTESTTOOL H define JTLTESTTOOL H include