在QT6中实现串口模块Qt6SerialPort

最新的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

 

 

 

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值