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

深入解析:Qt串口通信学习

深入解析:Qt串口通信学习

Qt串口通信学习

一、项目概述

本项目基于Qt框架实现了串口通信功能,支持串口参数配置、数据收发、串口状态管理等,适合初学者学习Qt串口模块的实际应用。

二、项目结构

  • 61.pro:Qt工程文件,配置模块与源码文件
  • main.cpp:程序入口,初始化应用与主窗口
  • widget.h / widget.cpp:主窗口类,包含UI与核心逻辑
  • widget.ui:界面文件(未展示,需在Qt Designer中查看)

三、环境配置

四、核心代码详解

1. main.cpp

#include "widget.h"
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}

2. widget.h

#ifndef WIDGET_H
#define WIDGET_H
#include
#include  // 串口类
#include  // 串口信息类
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_pushButton_clicked(bool checked);
private:
Ui::Widget *ui;           // UI指针
QSerialPort *serialPort;  // 串口对象
private slots:
void readData();          // 读取数据槽
void on_pushButton_2_clicked(); // 发送数据按钮槽
void on_pushButton_3_clicked(); // 清空发送区按钮槽
};
#endif // WIDGET_H

3. widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
serialPort = new QSerialPort(this);
// 扫描本机的串口,并且添加到下拉框里
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
ui->comboBox->addItem(info.portName());
}
// 读取数据
connect(serialPort, SIGNAL(readyRead()), this, SLOT(readData()));
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked(bool checked)
{
if (checked) {
serialPort->setPortName(ui->comboBox->currentText());
serialPort->setBaudRate(ui->comboBox_2->currentText().toInt());
serialPort->setStopBits(QSerialPort::StopBits(ui->comboBox_3->currentText().toInt()));
serialPort->setDataBits(QSerialPort::DataBits(ui->comboBox_4->currentText().toInt()));
switch (ui->comboBox_5->currentIndex()) {
case 0:
serialPort->setParity(QSerialPort::NoParity);
break;
case 1:
serialPort->setParity(QSerialPort::EvenParity);
break;
case 2:
serialPort->setParity(QSerialPort::OddParity);
break;
case 3:
serialPort->setParity(QSerialPort::SpaceParity);
break;
case 4:
serialPort->setParity(QSerialPort::MarkParity);
break;
default:
break;
}
serialPort->setFlowControl(QSerialPort::NoFlowControl);
if (!serialPort->open(QIODevice::ReadWrite)) {
QMessageBox::about(this, "错误", "串口打开失败可能被占用了");
return;
}
ui->comboBox->setEnabled(false);
ui->comboBox_2->setEnabled(false);
ui->comboBox_3->setEnabled(false);
ui->comboBox_4->setEnabled(false);
ui->comboBox_5->setEnabled(false);
ui->pushButton->setText("关闭串口");
} else {
serialPort->close();
ui->comboBox->setEnabled(true);
ui->comboBox_2->setEnabled(true);
ui->comboBox_3->setEnabled(true);
ui->comboBox_4->setEnabled(true);
ui->comboBox_5->setEnabled(true);
ui->pushButton->setText("打开串口");
}
}
void Widget::readData()
{
ui->textBrowser->insertPlainText(serialPort->readAll());
}
void Widget::on_pushButton_2_clicked()
{
serialPort->write(ui->textEdit->toPlainText().toUtf8());
}
void Widget::on_pushButton_3_clicked()
{
ui->textEdit->clear();
}
http://www.rkmt.cn/news/4360.html

相关文章:

  • 题解:P12546 [UOI 2025] Convex Array
  • 玩转 hostnamectl set-hostname:Linux 主机名管理的优雅方式 - 实践
  • Spring八股文 - 实践
  • Clion 基础设置
  • P3957 [NOIP 2017 普及组] 跳房子
  • JavaScript Array 对象
  • WebStorm代码一键美化
  • Golang中设置HTTP请求代理的策略
  • [开源免费] iGTTS(Gemini TTS) 文本转语音(TTS)的命令行工具。
  • 快读快写 学习笔记
  • AI编程实战
  • C#语言中使用using关键字
  • 【C++ 类和对象・高阶深化(下)】再探构造函数(含初始化列表),吃透 static 成员、友元、内部类及对象拷贝编译器优化 - 指南
  • 2
  • VSCode 运行 C/C++ 程序
  • Springcloud Alibaba(一)
  • Ubuntu 安装 gcc
  • 更为通用的决策单调性
  • NOIP2025模拟赛19
  • C++ day7 - 指南
  • 读人形机器人11娱乐领域
  • 模板集
  • 课程助教工作总结
  • device第一周个人作业
  • 5G 技术在工业互联网的应用
  • 一键部署ftp脚本
  • 三大免费CDN推荐:安全防护强、稳定性卓越、加载飞速,长期使用超安心
  • 全屏与退出全屏功能
  • 5月杂题
  • uv,下一代Python包管理工具