Qt QSerialPort数据发送和接收DataComm
文章目录
- Qt QSerialPort数据发送和接收DataComm
- 2.添加 Qt Serial Port 模块
- 3.实例源码
Qt QSerialPort数据发送和接收DataComm
Qt 框架的Qt Serial Port 模块提供了访问串口的基本功能,包括串口通信参数配置和数据读写,使用 Qt Serial Port 模块就可以很方便地编写具有串口通信功能的应用程序。
- 创建一个基于
QMainWindow应用程序

2.添加 Qt Serial Port 模块
Qt Serial Port 模块用于串口通信编程,要在一个项目中使用 Qt Serial Port 模块,需要在项目配置文件中加入一行语句:QT += serialport
Qt Serial Port 模块中只包含有两个类:QSerialPortInfo 和 QSerialPort。
3.实例源码
头文件datacomm.h
#ifndef DATACOMM_H
#define DATACOMM_H#include <QMainWindow>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QTimer>QT_BEGIN_NAMESPACE
namespace Ui {
class DataComm;
}
QT_END_NAMESPACEclass DataComm : public QMainWindow
{Q_OBJECTpublic:DataComm(QWidget *parent = nullptr);~DataComm();
private slots:void clear_recv();void clear_send();void on_com_recv();void on_com_send();void on_com_open();void on_com_changed(int index);void on_timeout();void on_check_state_changed(int);void get_interval();
private:void send();Ui::DataComm *ui;QSerialPort comPort;bool bCircle;int interval;QTimer *timer;QByteArray stdCmd;QString strCmd;
};
#endif // DATACOMM_H
源文件datacomm.cpp
#include "datacomm.h"
#include "ui_datacomm.h"
#include <QMessageBox>DataComm::DataComm(QWidget *parent): QMainWindow(parent), ui(new Ui::DataComm)
{ui->setupUi(this);foreach (QSerialPortInfo portInfo, QSerialPortInfo::availablePorts()) {ui->comboBoxPort->addItem(portInfo.portName());}ui->comboBoxPort->setCurrentIndex(2);connect(ui->comboBoxPort,SIGNAL(currentIndexChanged(int)),this,SLOT(on_com_changed(int)));ui->pushButtonOpen->setEnabled(ui->comboBoxPort->count()>0);ui->pushButtonSend->setEnabled(false);connect(ui->pushButtonOpen,SIGNAL(clicked()),this,SLOT(on_com_open()));connect(ui->pushButtonSend,SIGNAL(clicked()),this,SLOT(on_com_send()));ui->comboBoxBaud->clear();foreach (qint32 baud, QSerialPortInfo::standardBaudRates()) {ui->comboBoxBaud->addItem(QString::number(baud));}ui->comboBoxBaud->setCurrentText("9600");ui->comboBoxCheck->addItem("NONE");ui->comboBoxCheck->addItem("ODD");ui->comboBoxCheck->addItem("EVEN");ui->comboBoxCheck->addItem("SPACE");ui->comboBoxCheck->addItem("MARK");ui->comboBoxFlowCtrl->addItem("NONE");ui->comboBoxFlowCtrl->addItem("HARD");ui->comboBoxFlowCtrl->addItem("SOFT");ui->comboBoxDataBit->addItem("5");ui->comboBoxDataBit->addItem("6");ui->comboBoxDataBit->addItem("7");ui->comboBoxDataBit->addItem("8");ui->comboBoxDataBit->setCurrentText("8");ui->comboBoxStopBit->addItem("1");ui->comboBoxStopBit->addItem("1.5");ui->comboBoxStopBit->addItem("2");timer = new QTimer(this);ui->lineEditTime->setText("1000");interval = 1000;connect(ui->pushButtonClearRecv,&QPushButton::clicked,this,&DataComm::clear_recv);connect(ui->pushButtonClearSend,&QPushButton::clicked,this,&DataComm::clear_send);connect(timer,&QTimer::timeout,this,&DataComm::on_timeout);connect(ui->lineEditTime,&QLineEdit::textChanged,this,&DataComm::get_interval);connect(&comPort,&QIODevice::readyRead,this,&DataComm::on_com_recv);connect(ui->checkBoxCircle,&QCheckBox::stateChanged,this,&DataComm::on_check_state_changed);resize(800,600);
}DataComm::~DataComm()
{delete ui;
}void DataComm::clear_recv()
{ui->plainTextEditRecv->clear();
}void DataComm::clear_send()
{ui->plainTextEditSend->clear();
}
void DataComm::on_com_open()
{if(comPort.isOpen()) {comPort.close();ui->comboBoxPort->setEnabled(true);ui->comboBoxBaud->setEnabled(true);ui->comboBoxCheck->setEnabled(true);ui->comboBoxDataBit->setEnabled(true);ui->comboBoxStopBit->setEnabled(true);ui->comboBoxFlowCtrl->setEnabled(true);ui->pushButtonSend->setEnabled(false);ui->pushButtonOpen->setText("打开");}else {int index = ui->comboBoxPort->currentIndex();QList<QSerialPortInfo> comList = QSerialPortInfo::availablePorts();QSerialPortInfo portInfo = comList.at(index);comPort.setPort(portInfo);comPort.setReadBufferSize(2048);comPort.setBaudRate(ui->comboBoxBaud->currentText().toInt());int value = ui->comboBoxDataBit->currentText().toInt();comPort.setDataBits(QSerialPort::DataBits(value));value = ui->comboBoxCheck->currentText().toInt();if(value != 0) {value ++;}comPort.setParity(QSerialPort::Parity(value));value = ui->comboBoxStopBit->currentText().toInt();comPort.setStopBits(QSerialPort::StopBits(value));value = ui->comboBoxFlowCtrl->currentText().toInt();comPort.setFlowControl(QSerialPort::FlowControl(value));if(comPort.open(QIODevice::ReadWrite)) {ui->comboBoxPort->setEnabled(false);ui->comboBoxBaud->setEnabled(false);ui->comboBoxCheck->setEnabled(false);ui->comboBoxDataBit->setEnabled(false);ui->comboBoxStopBit->setEnabled(false);ui->comboBoxFlowCtrl->setEnabled(false);ui->pushButtonSend->setEnabled(true);ui->pushButtonOpen->setText("关闭");}}
}void DataComm::get_interval()
{int val = ui->lineEditTime->text().toInt();if(val > 0) {interval = val;}else {ui->lineEditTime->setText(QString::number(interval));}
}void DataComm::on_check_state_changed(int)
{bCircle = ui->checkBoxCircle->isChecked();if(!bCircle) {if(timer->isActive()) {timer->stop();ui->pushButtonSend->setEnabled(true);}}
}
void DataComm::send()
{ui->plainTextEditRecv->appendPlainText("Tx: "+ strCmd );comPort.write((const QByteArray )stdCmd);
}void DataComm::on_com_send()
{strCmd = ui->plainTextEditSend->toPlainText();if(strCmd.isEmpty()) {QMessageBox::information(this,tr("发送内容为空"),tr("发送内容为空!"));return;}QByteArray ba = QByteArray (strCmd.toUtf8());stdCmd = ba;send();bCircle = ui->checkBoxCircle->isChecked();if(bCircle) {ui->pushButtonSend->setEnabled(false);timer->start(interval);}
}void DataComm::on_timeout()
{send();
}void DataComm::on_com_recv()
{if(comPort.bytesAvailable()) {comPort.waitForReadyRead(100);QByteArray all = comPort.read(1024);QString str(all);if(!str.isEmpty()){ui->plainTextEditRecv->appendPlainText("Rx: "+ str );}}
}void DataComm::on_com_changed(int index)
{}
源文件main.cpp
#include "datacomm.h"#include <QApplication>
#include <QLocale>
#include <QTranslator>int main(int argc, char *argv[])
{QApplication a(argc, argv);QTranslator translator;const QStringList uiLanguages = QLocale::system().uiLanguages();for (const QString &locale : uiLanguages) {const QString baseName = "DataCom_" + QLocale(locale).name();if (translator.load(":/i18n/" + baseName)) {a.installTranslator(&translator);break;}}DataComm w;w.show();return a.exec();
}
nguages) {
const QString baseName = “DataCom_” + QLocale(locale).name();
if (translator.load(“:/i18n/” + baseName)) {
a.installTranslator(&translator);
break;
}
}
DataComm w;
w.show();
return a.exec();
}
相关文章:
Qt QSerialPort数据发送和接收DataComm
文章目录 Qt QSerialPort数据发送和接收DataComm2.添加 Qt Serial Port 模块3.实例源码 Qt QSerialPort数据发送和接收DataComm Qt 框架的Qt Serial Port 模块提供了访问串口的基本功能,包括串口通信参数配置和数据读写,使用 Qt Serial Port 模块就可以…...
macOS上谷歌浏览器的十大隐藏功能
谷歌浏览器(Google Chrome)在macOS上拥有一系列强大而隐蔽的特性,这些功能能显著提高您的浏览体验。从多设备同步到提升安全性和效率,这些被低估的功能等待着被发掘。我们将逐步探索这些功能,帮助您最大化利用谷歌浏览…...
【C++篇】C++类与对象深度解析(二):类的默认成员函数详解
文章目录 【C篇】C类与对象深度解析(二)前言1. 类的默认成员函数2. 构造函数2.1 函数名与类名相同2.2 无返回值2.3 对象实例化时系统会自动调用2.4 构造函数可以重载2.5 默认构造函数的生成规则2.6 无参构造函数与全缺省构造函数的关系2.7 内置类型与自定…...
Linux2-mkdir,touch,cat,more
1.相对路径和绝对路径 cd用于切换目录,对于路径可以用相对路径和绝对路径 例如:cd /home/user/public和cd public效果一样,都是将目录切换到HOME文件夹下的public文件夹 2.特殊路径符 .表示当前目录 ..表示上级目录 ~表示HOME目录 3.m…...
AI 时代程序员的应变之道
一、AI 浪潮来袭,编程界风云变幻 随着 AIGC 大语言模型如 ChatGPT、Midjourney、Claude 等的涌现,AI 辅助编程工具日益普及,程序员的工作方式正经历着深刻的变革。 分析公司 OReilly 日前发布的《2023 Generative AI in the Enterprise》报告…...
SQL编程题复习(24/9/16)
练习题 x40 10-74 获取商品表中商品名称含有“pad”的商品10-75 获取指定商品的商品分类名称(多表查询)10-76 为sh_goods表添加一行记录10-77 检索出sh_goods表中每项keyword对应的商品数量,查询结果显示字段依据输出样例设置10-78 查询sh_go…...
运维工程师面试整理-操作系统
在运维工程师的面试中,操作系统相关的知识通常是重中之重,尤其是Linux/Unix系统。以下是针对操作系统部分的一些详细内容,帮助你更好地准备面试。 1. Linux/Unix 基础 ● 常用命令 ○ 文件和目录管理:ls, cd, cp, mv, rm, mkdir, rmdir, find, grep, awk, sed...
Linux搭建邮箱服务器(简易版)
本章是上一文档的简易版本搭建方式更为快速简洁(只需要两条命令即可搭建),如果想了解更详细一些可以看我上一文档 Linux接发邮件mailx_linux mailx o365-CSDN博客文章浏览阅读857次,点赞25次,收藏19次。本文详细描述了…...
基于SSM的社区爱心捐赠管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSSMVueMySQL的社区爱…...
鸿蒙next web组件和h5 交互实战来了
前言导读 鸿蒙next web组件这个专题之前一直想讲一下 苦于没有时间,周末把代码研究的差不多了,所以就趁着现在这个时间节点分享给大家。也希望能对各位读者网友工作和学习有帮助,废话不多说我们正式开始。 效果图 默认页面 上面H5 下面ArkU…...
甘特图介绍
甘特图(Gantt chart)是一种常用于项目管理和计划安排的图表类型,它以图形的方式展示项目的任务、活动或工作流的时间线。甘特图得名于它的发明者亨利劳伦斯甘特(Henry Laurence Gantt),他在20世纪初开发了这…...
第十一章 【后端】商品分类管理微服务(11.1)——创建父工程
第十一章 【后端】商品分类管理微服务 11.1 创建父工程 项目名称:EasyTradeManagerSystem:Easy 表示简单易用,Trade 表示交易,Manager 表示管理,System 表示系统,强调系统在商品交易管理方面的便捷性,简称 etms。 新建工程 yumi-etms yumi-etms 作为所有模块的父工程,…...
c语言中的“二级指针”与“指针数组”
二级指针 int main() { int a10; int *pa&a; //pa是一级指针 int **ppa&pa; //ppa就是二级指针变量 *说明ppa是指针变量。ppa指向pa的类型是int* rerurn 0; } 二级指针就是用来存放一级指针变量的地址。 *ppa其实访问的就是pa。**ppa其实也就是*pa…...
IDA f5 无法生成伪代码 too big function 的原因之一以及解决方法
IDA 提示 0x00xxxxx: too big function 其中可能的原因可能是因为 c的异常 try catch 导致函数跳转太远导致的 找到地址 B64778 在 jmp ___CxxFrameHandler3上按 “e” 将函数的结尾定在这里 然后再按 f5 函数就已经成功生成了...
OpenCV-上下采样
文章目录 一,简介二、下采样(Downsampling)三、上采样(Upsampling)四、代码实现1.图像读取2.下采样3.上采样4.拉普拉斯金字塔 五、应用 一,简介 高斯金字塔是图像处理、计算机视觉和信号处理中常用的一项技…...
pip install、yum install和conda install三者技术区分
pip install、yum install和conda install在安装系统环境时可以从以下几个方面进行区分选择: 一、适用范围 pip install 主要用于安装 Python 包。适用于 Python 项目中特定的库和工具的安装。如果你的项目是纯 Python 开发,并且需要安装各种 Python 库&…...
【C++指南】作用域限定符 :: 使用详解
💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《C指南》 期待您的关注 目录 引言 1. 访问全局变量 2. 命名空间中的成员访问 3. 类的静态成员访问 4. 嵌套命名空间/类中的…...
项目实训:CSS基本布局理解——WEB开发系列38
对CSS学习已经接近尾声,下面你可以对以下两道“小卡拉米”测试进行测试下CSS理解程度。 题 1:基于栅格布局的现代博客首页设计 题目要求: 创建一个博客首页布局,包含一个顶部导航栏、一个主要的内容区域(左侧为博客文…...
springBoot整合easyexcel实现导入、导出功能
本次使用的框架是springboot,使用mybatisplus操作表,使用easyexcel实现表格的导入与导出。 操作步骤 1、导入依赖:(pom.xml) <!-- 查看excel的maven仓库 https://mvnrepository.com/artifact/com.alibaba/easyex…...
代码随想录训练营第35天|逆序背包
46. 携带研究材料 #include <iostream> #include <vector> using namespace std; int main(){int m,n;cin>>m>>n;vector<int> weights(m,0), values(m,0),dp(n1,0);for(int i0; i<m; i){cin>>weights[i];}for(int i0; i<m; i){cin…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
