最新的Qt6没有串口模块QSerialPort,只能自己去编译Qt5的源码。
1.找到QSerialPort的源码
QSerialPort源码在这里,没有源码,需要自己安装源码模块,我这里用的是5.15.2的源码。
2.构建工程
将sqerialport整个文件夹复制到其他地方,用qtcreator打开,选择编译器qt6 msvc2019 64bit
打开qtserialport.pro,有如下内容
lessThan(QT_MAJOR_VERSION, 5) { message("Cannot build current QtSerialPort sources with Qt version $${QT_VERSION}.") error("Use at least Qt 5.0.0 or try to download QtSerialPort for Qt4.")
将load(qt_parts)替换为下面内容
#load(qt_parts) 以下部分全是文件qt_parts.prf中的内容,删除了examples,test # This file is not part of the Qt API. It exists purely as an # implementation detail. It may change from version to version # without notice, or even be removed. # Ensure that each module has a .qmake.cache when properly qmake'd. bp = $$eval($$upper($$TARGET)_BUILD_PARTS) !isEmpty(bp): QT_BUILD_PARTS = $$bp exists($$_PRO_FILE_PWD_/src/src.pro) { exists($$_PRO_FILE_PWD_/tools/tools.pro) { sub_tools.target = sub-tools sub_tools.depends = sub_src # conditional treatment happens on a case-by-case basis QT_BUILD_PARTS -= libs tools examples tests !isEmpty(QT_BUILD_PARTS): warning("Unknown build part(s): $$QT_BUILD_PARTS") mkspecs/modules-inst/*.pri tests = $$files($$_PRO_FILE_PWD_/config.tests/*.pro, true) testdirs += $$relative_path($$dirname(t), $$_PRO_FILE_PWD_) testdirs = $$unique(testdirs) t = $$basename(td)-distclean $${t}.commands = -$$QMAKE_CD $$shell_path($$td) && $(MAKE) distclean QMAKE_EXTRA_TARGETS += $$t
然后整个项目就变为下图所示
3.修改文件内容
去掉所有文件中路径前缀QtSerialPort
#include <QtSerialPort/qserialportglobal.h> #include "qserialportglobal.h"
4.编译生成库文件
构建serialport工程,最后会生成如下文件。
5.使用Qt6SerialPort
该库的用法Qt5一样,经过测试可以使用。
QSerialPort *m_serialPort; m_serialPort = new QSerialPort();//实例化串口类一个对象 if(m_serialPort->isOpen())//如果串口已经打开了 先给他关闭了 //设置串口名字 假设我们上面已经成功获取到了 并且使用第一个 m_serialPort->setPortName("COM10"); m_serialPort->setBaudRate(QSerialPort::Baud9600,QSerialPort::AllDirections);//设置波特率和读写方向 m_serialPort->setDataBits(QSerialPort::Data8); //数据位为8位 m_serialPort->setFlowControl(QSerialPort::NoFlowControl);//无流控制 m_serialPort->setParity(QSerialPort::NoParity); //无校验位 m_serialPort->setStopBits(QSerialPort::OneStop); //一位停止位 if(!m_serialPort->open(QIODevice::ReadWrite))//用ReadWrite 的模式尝试打开串口 connect(m_serialPort,&QSerialPort::readyRead,[this]() { QByteArray info = m_serialPort->readAll(); m_serialPort->write(info);
源码:https://download.csdn.net/download/qq_40732350/15042644
|