当前位置: 首页 > news >正文

Qt QSerialPort数据发送和接收DataComm

文章目录

    • Qt QSerialPort数据发送和接收DataComm
    • 2.添加 Qt Serial Port 模块
    • 3.实例源码

Qt QSerialPort数据发送和接收DataComm

Qt 框架的Qt Serial Port 模块提供了访问串口的基本功能,包括串口通信参数配置和数据读写,使用 Qt Serial Port 模块就可以很方便地编写具有串口通信功能的应用程序。

  1. 创建一个基于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();
}


相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 对浏览器事件循环机制的理解
  • Redis 篇-深入了解基于 Redis 实现消息队列(比较基于 List 实现消息队列、基于 PubSub 发布订阅模型之间的区别)
  • JDBC简介与应用:Java数据库连接的核心概念和技术
  • 【Redis】Redis 典型应用 - 缓存 (Cache) 原理与策略
  • BuripSuiteProfessional 抓取HTTPS配置
  • Java实现简易计算器功能(idea)
  • day5 QT
  • 多级缓存的设计与实现
  • C语言代码练习(第十八天)
  • ​如何使用QGIS制作三维建筑
  • 一张图告诉你常见的响应状态码!200报错400 404 500都是什么意思??
  • 光耦合器的工作原理和故障诊断
  • 25. MyBatis中的RowBounds是什么?如何实现内存分页?
  • KAN 学习 Day4 —— MultKAN 正向传播代码解读及测试
  • 【RabbitMQ】概述
  • [译]如何构建服务器端web组件,为何要构建?
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 0x05 Python数据分析,Anaconda八斩刀
  • AWS实战 - 利用IAM对S3做访问控制
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • yii2中session跨域名的问题
  • 聚簇索引和非聚簇索引
  • 力扣(LeetCode)21
  • 模型微调
  • 如何正确配置 Ubuntu 14.04 服务器?
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​​​【收录 Hello 算法】9.4 小结
  • #VERDI# 关于如何查看FSM状态机的方法
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (二)JAVA使用POI操作excel
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (强烈推荐)移动端音视频从零到上手(上)
  • (十)Flink Table API 和 SQL 基本概念
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (一)Neo4j下载安装以及初次使用
  • (一)SvelteKit教程:hello world
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)Linux下编译安装log4cxx
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • .describe() python_Python-Win32com-Excel
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .net(C#)中String.Format如何使用
  • @ConditionalOnProperty注解使用说明
  • @Value获取值和@ConfigurationProperties获取值用法及比较(springboot)
  • [100天算法】-不同路径 III(day 73)
  • [18] Opencv_CUDA应用之 基于颜色的对象检测与跟踪
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件
  • [Angular] 笔记 6:ngStyle
  • [CTSC2014]企鹅QQ
  • [HackMyVM]靶场 Wild
  • [hibernate]基本值类型映射之日期类型