最新的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.")
}
requires(!integrity)
requires(!vxworks)
requires(!winrt)
requires(!uikit)
requires(!emscripten)
load(configure)
qtCompileTest(ntddmodm)
load(qt_parts)
将load(qt_parts)替换为下面内容
#load(qt_parts) 以下部分全是文件qt_parts.prf中的内容,删除了examples,test
#
# W A R N I N G
# -------------
#
# 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.
#
# We mean it.
#
# Ensure that each module has a .qmake.cache when properly qmake'd.
cache()
load(qt_configure)
load(qt_build_config)
TEMPLATE = subdirs
bp = $$eval($$upper($$TARGET)_BUILD_PARTS)
!isEmpty(bp): QT_BUILD_PARTS = $$bp
exists($$_PRO_FILE_PWD_/src/src.pro) {
sub_src.subdir = src
sub_src.target = sub-src
SUBDIRS += sub_src
exists($$_PRO_FILE_PWD_/tools/tools.pro) {
sub_tools.subdir = tools
sub_tools.target = sub-tools
sub_tools.depends = sub_src
# conditional treatment happens on a case-by-case basis
SUBDIRS += sub_tools
}
}
QT_BUILD_PARTS -= libs tools examples tests
!isEmpty(QT_BUILD_PARTS): warning("Unknown build part(s): $$QT_BUILD_PARTS")
QMAKE_DISTCLEAN += \
.qmake.cache \
config.cache \
config.log \
mkspecs/modules/*.pri \
mkspecs/modules-inst/*.pri
tests = $$files($$_PRO_FILE_PWD_/config.tests/*.pro, true)
testdirs =
for (t, tests): \
testdirs += $$relative_path($$dirname(t), $$_PRO_FILE_PWD_)
testdirs = $$unique(testdirs)
for (td, testdirs) {
t = $$basename(td)-distclean
$${t}.commands = -$$QMAKE_CD $$shell_path($$td) && $(MAKE) distclean
QMAKE_EXTRA_TARGETS += $$t
DISTCLEAN_DEPS += $$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->clear();
m_serialPort->close();
}
//设置串口名字 假设我们上面已经成功获取到了 并且使用第一个
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 的模式尝试打开串口
{
qDebug()<<"COM10打开失败!";
return;
}
connect(m_serialPort,&QSerialPort::readyRead,[this]() {
QByteArray info = m_serialPort->readAll();
qDebug()<<info;
m_serialPort->write(info);
});
源码:https://download.csdn.net/download/qq_40732350/15042644