在QT6中实现串口模块Qt6SerialPort

本文介绍如何在Qt6环境下编译Qt5的串口模块QSerialPort,包括修改源码、配置编译环境及使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最新的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.youkuaiyun.com/download/qq_40732350/15042644

 

 

 

<think>好的,用户想了解如何根据项目需求选择合适的Qt版本。我需要先整理一下相关的信息,看看之前提供的引用内容有没有相关的知识点。 首先,引用[1]提到Qt版本实际上是一个套件包,包含不同平台版本和调试器。安装完Qt后需要安装Qt Creator。这说明Qt有不同的版本和平台支持,这可能影响到选择。 引用[2]和[3]涉及到项目配置和入门案例,比如复制文件到项目目录、修改.pro文件,以及开发小工具的需求分析。这可能关系到不同Qt版本对项目特性的支持,比如是否需要特定的模块或功能。 接下来,我需要考虑用户可能的需求维度。比如目标平台(桌面、移动、嵌入式)、需要的功能模块(如网络、数据库、图形)、是否需要长期支持版本(LTS)的稳定性,或者最新版本的新特性。还有开源协议的问题,如果是商业项目可能需要商业许可。 另外,用户提到的Qt Creator和Qt Designer的使用情况,根据引用[3],他们可能倾向于用代码布局而不是Designer,这可能影响版本选择,但可能关系不大。不过不同版本的Qt Creator可能有不同的工具支持,比如调试器或性能分析工具。 还需要考虑兼容性和社区支持。LTS版本有更长的维护周期,适合需要稳定性的项目,而最新版本可能包含新功能但可能有未知问题。此外,如果项目需要用到某些仅在较新版本中引入的模块,比如Qt Quick 3D,就必须选对应的版本。 还有安装包的大小和依赖项,比如如果项目需要轻量级,可能选择只安装必要的模块,而Qt的在线安装器允许自定义,这可能帮助用户减少不必要的组件。 测试和原型开发也是一个方面,用户可能想先用较新版本做原型,再根据情况调整。此外,文档和示例的丰富程度可能影响选择,LTS版本通常有更多资源。 总结下来,步骤应该是:明确项目需求(平台、功能、规模)→ 确定所需Qt模块 → 选择LTS或最新版 → 检查许可证 → 下载安装并验证。同时,可能需要参考官方文档和社区建议,确保兼容性。</think>### 如何根据项目需求选择合适的Qt版本? 选择合适的Qt版本需要综合考虑项目目标、技术需求和开发环境。以下是具体步骤和建议: --- #### 1. **明确项目需求** - **目标平台**: - 桌面端(Windows/macOS/Linux):所有Qt版本均支持,但需注意特定平台的兼容性(如macOS的Dark Mode适配需Qt 5.12+)[^1]。 - 移动端(Android/iOS):需选择包含Android NDK或Xcode支持的Qt版本,例如Qt 5.15 LTS或Qt 6.2+。 - 嵌入式系统(如嵌入式Linux、QNX):优先选择长期支持(LTS)版本,例如Qt 5.15或Qt 6.2 LTS,并确认是否包含目标平台的BSP支持[^1]。 - **功能模块**: - 基础GUI开发:Qt Widgets(适合传统桌面应用)或Qt Quick(适合现代UI动画)。 - 网络/数据库:需包含`Qt Network`、`Qt SQL`模块(默认包含在完整安装中)。 - 3D图形:需Qt 6.0+的`Qt Quick 3D`模块。 --- #### 2. **选择LTS或最新版本** - **长期支持版本(LTS)**: - 特点:稳定性高、维护周期长(通常3年),适合企业级或长期维护项目。 - 推荐版本:Qt 5.15 LTS(传统项目)、Qt 6.2 LTS(新功能需求)。 - **最新版本**: - 特点:包含新特性(如Qt 6的改进型渲染引擎),但可能存在未修复的Bug,适合实验性项目或需要特定新功能的场景。 --- #### 3. **检查模块和依赖项** - 通过Qt官方安装器(Qt Online Installer)查看模块列表: - 核心模块(必须):`Qt Core`、`Qt GUI`。 - 扩展模块(按需):`Qt Charts`(图表)、`Qt Multimedia`(音视频处理)等。 - 若项目涉及硬件交互(如串口通信),需确认是否包含`Qt SerialPort`模块。 --- #### 4. **许可证兼容性** - **开源项目**:选择LGPLv3版本,允许动态链接库,无需公开源代码。 - **商业项目**:需购买商业许可证,避免LGPL的约束[^1]。 --- #### 5. **环境与工具链匹配** - **编译器兼容性**: - Windows:MSVC或MinGW(需与项目原有代码的编译器一致)。 - Linux:GCC版本需匹配Qt官方要求(如Qt 6.2需GCC 9+)。 - **调试工具**:若需性能分析,选择包含`Qt Creator`调试插件的版本。 --- #### 6. **验证与测试** - 创建最小化原型项目,验证关键功能(如跨平台渲染、第三方库调用)。 - 示例代码片段: ```cpp #include <QApplication> #include <QLabel> int main(int argc, char *argv[]) { QApplication app(argc, argv); QLabel label("Hello Qt!"); label.show(); return app.exec(); } ``` - 若需集成原有C++代码,参考资源文件管理和.pro文件配置方法[^2]。 --- ###
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值