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号、波特率、奇偶校验等参数进行设置,具体步骤:
- 定义QSerialPort 类对象
- 设置串口的工作参数,如Com号、波特率、奇偶校验等
- 使用open()函数打开串口
- 确认串口已打开
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);
}
效果:


浙公网安备 33010602011771号