Qt 串口通信

  • 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

posted @ 2026-02-11 17:35  丹心石  阅读(47)  评论(0)    收藏  举报