惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The Cloudflare Blog
L
LangChain Blog
WordPress大学
WordPress大学
V
V2EX
M
MIT News - Artificial intelligence
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Stack Overflow Blog
Stack Overflow Blog
J
Java Code Geeks
F
Fortinet All Blogs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
腾讯CDC
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
D
Docker
Recent Announcements
Recent Announcements
GbyAI
GbyAI
博客园 - 叶小钗
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
T
The Blog of Author Tim Ferriss
人人都是产品经理
人人都是产品经理
Engineering at Meta
Engineering at Meta
Y
Y Combinator Blog
雷峰网
雷峰网
The GitHub Blog
The GitHub Blog

博客园 - 丹心石

数据字节位改变 锁定鼠标光标到指定屏幕 WPF 访问WebAPI Avalonia 避坑经验总结 Avalonia 窗口与配置 Avalonia 程序打包成Linux平台的运行程序 数据处理与转换 信号与槽 Avalonia 设计时DataContext数据山下文和WPF设计时DataContext数据上下文 Avalonia Ursa 使用 Avalonia-消息对话框 Avalonia-数据绑定 Avalonia-样式 阿里图标库iconfont 在Avalonia 中的使用 Avalonia MVVM Avlonia 自定义控件 Sqlite EF For ConsoleCore Sqlite EF CodeFirst For WPF win10 环境变量不可编辑 WCF-双工通讯 MahMetro 框架学习 由于缺少调试目标“xxx”Visual Studio 无法开始调试。或者响应地设置outputpath和AssemblyName 属性 WPF 应用程序本地化-资源文件方式 FastReport 行高设置实现行高随内容自动变化
Qt 串口通信
丹心石 · 2026-02-11 · via 博客园 - 丹心石
  • Qt 5 提供了串口操作相关的类QSerialPortInfo和QSerialPort

  • QSerialPortInfo 类可以监测系统的串口信息,如Com 号、设备位置、厂商信息等。

  • QSerialPort 类可以完成串口的具体操作,如打开或关闭串口、读写数据等。

  • 要使用这两个类,要在Pro文件中添加模块:
    QT+=serialport;

  • 同时在程序中包含头文件

    #include<QSerialPort>
    #include <QSerialPortInfo>
    

    获取所有串口设备

    • 要获取电脑中所有串口设备信息:调用QSerialPortInfo类的静态成员函数availablePorts()

    配置文件:

    情况1:如果是 CMake项目,则需要在CMakeLists.txt 中配置
    方法:打开CMakeList.txt,添加串口模块。通常,在CMake中,你需要使用find_package来找到Qt的组件,然后在链接时加上对应的库

    find_package(Qt6 COMPONENT Core Gui SerialPort REQUIRED)  #添加SerialPort
    #然后再使用Qt6库的地方,比如你的可执行目标 Qt6::SerialPort
    target_link_library(your_target Qt6::Core Qt6::Gui Qt5::SerialPort)
    
    

    情况2:如果是QMake 构建的,则使用上面方法即可 。

例:

void MainWindow::setSerialPorts()
{
    foreach(QSerialPortInfo info,QSerialPortInfo::availablePorts())
    {
        ui->cbSerialPorts->addItem(info.portName());
    }
}

设置串口参数并打开串口

  • 使用串口前需要对串口的COM号、波特率、奇偶校验等参数进行设置,具体步骤:
    1. 定义QSerialPort 类对象
    2. 设置串口的工作参数,如Com号、波特率、奇偶校验等
    3. 使用open()函数打开串口
    4. 确认串口已打开
void MainWindow::on_btnOpenSerialPort_clicked()
{
    //设置串口工作参数
    m_port->setPortName(ui->cbSerialPorts->currentText());
    m_port->setBaudRate(QSerialPort::Baud9600);
    m_port->setDataBits(QSerialPort::Data8);
    m_port->setParity(QSerialPort::NoParity);
    m_port->setStopBits(QSerialPort::OneStop);
    m_port->setFlowControl(QSerialPort::NoFlowControl);

    try{
        if(ui->btnOpenSerialPort->text()=="打开")
        {
            m_port->open(QIODevice::ReadWrite);
            if(m_port->isOpen())
            {
                ui->btnOpenSerialPort->setText("关闭");
                qDebug()<<"串口打开成功";

            }
        }
        else if(ui->btnOpenSerialPort->text()=="关闭")
        {
            m_port->close();
            qDebug()<<"串口成功关闭";
        }

    }
    catch(std::exception ex)
    {
        qDebug()<<ex.what();
    }
}


串口的读写

  • QSerialPort 类的父类QIODevice提供了共有的write()、read()、readAll()等函数.
  • QSerialPort 类继承了这些函数,从而实现串口数据的读写操作

例如:

void MainWindow::on_btnSend_clicked()
{
    QByteArray data="This is Qt C++ SerialPort Data";
    qDebug()<<m_port->write(data);
}

效果:
image