当前位置: 首页 > news >正文

Qt5升级到Qt6分步迁移教程

Qt框架的一个新的长期支持版本6.5最近发布。它为以前的版本引入了许多修复、改进和新功能。有些可能对您的应用程序有用(如果不是现在,可能会在将来),因此最好将应用程序迁移到最新版本的框架。 

仍然有许多应用程序仍在使用Qt 5,因此直接迁移到最新版本的框架并不容易。在本文中主要指出从Qt 5顺利迁移到Qt 6的最关键步骤。

那么,为什么是Qt 6呢? 

  1. 改进了性能。Qt 6引入了一个新的渲染管线,可以提高性能并减少内存使用量,从而产生更快、响应更快的应用程序。
  2. 改进的 QML。QML 已得到增强,性能更好,改进了对将C++类导出到 QML 的支持,以及用于调试 QML 代码的更强大的工具。新的Qt快速编译器允许您预编译QML文件,以加快启动时间。
  3. 改进的模块。一些模块已被重写和改进,例如Qt Quick 3D,Qt Multimedia和Qt WebEngine。使用这些模块的最新版本将确保您的应用程序符合当前标准。
  4. 附加模块。许多模块将作为附加组件提供。它将使Qt二进制文件更小,并允许您仅在项目中需要时才下载模块。
  5. 统一后端。Qt 6提供了一个API来访问多个环境中特定于平台的功能。这包括图形、多媒体、输入和窗口系统。
  6. 长期支持。Qt 5已经到了它的生命周期,虽然某些旧版本仍然有安全和错误修复,但任何新的特性或功能都只能在Qt 6中使用。如果您不希望您的应用程序过时得太快,您应该进行迁移。

这些是确保使用最新版本的Qt 6使您的应用程序与最新功能保持同步的主要内容。应用程序的性能将比以前更好,并且将来维护应用程序将更容易。

迁移到Qt 6的路径 

第 1 步。QT 移植到 QT 5.15 

将应用程序移植到Qt 5的最新版本,然后切换到Qt 6要容易得多。这是因为Qt在6.5版本中只发布了简化迁移到Qt 5.15的机制。从Qt 5的先前版本迁移到最新版本的Qt 5应该很简单。

第 2 步。检查模块更改 

在Qt 6中,Qt 5中提供的某些模块不再可用。这些模块将被删除、重命名或合并到不同的模块中。在最新版本中,几个已删除的模块已经刷新并添加到框架中。

通过检查模块更改,可以确保应用程序在迁移后按预期工作。当模块不再存在时,关于如何表现的可能解决方案可能会有所不同。下面是几个已弃用模块的示例,以及如何更新使用它们的代码。

  • Qt 快速控制 1 → 使用新的 Qt 快速控制 2
  • Qt Multimedia Widgets → 使用 Qt Multimedia 的 QML API
  • Qt 图形效果 → 使用 Qt5Compat 模块(Qt Quick MultiEffect 从 Qt 6.5 开始)

因此,取决于需要替换的模块。删除模块和其他更改的完整列表可以在Qt文档中找到。

“是否需要检查文档中每个模块的更改?”

没必要。它可以帮助您找到已弃用API的正确替代品,但Qt creator工具可以提示不再受支持的代码的所有部分。请看步骤4.

第 3 步。QT移植:检查您的环境 

Qt 6需要C++17或更高版本的编译器(例如,对于Windows – MinGW 8.1.0或msvc 2019),因此如果您使用的是旧版本,则是时候升级了。Qt公司开发的工具也支持Qt 6,因为特定版本。对于Qt Creator,它是4.14,对于Qt Design Studio,它是2.0。

如果安装了正确的编译器和工具,则为 Qt 6 准备的应用程序应在移植后正确构建和运行。

第 4 步。执行移植到 QT 6 

摆脱已弃用的功能。 

在Qt 5.15中,Qt 6中不包含的所有内容都被标记为已弃用。默认情况下,此代码的使用将作为编译器警告弹出。但是也可以选择将其视为错误。

要确保这一点,需要定义它应设置为指定宏时,已弃用的功能(在给定版本的Qt或任何更早版本中)将被禁用。QT_DISABLE_DEPRECATED_BEFORE0x050F00

如果在生成过程中看到任何错误,则应重构该部分。

 

不带宏的输出。应用已正确构建。

使用宏输出。无法构建应用。 

运行冲突并摆脱这些警告。 

Clazy 是一个静态分析工具,可作为 QtCreator 中的插件使用。Clazy 可以分析代码并向您展示需要改进的地方。可以明确地告诉 Clazy 在执行过程中要检查什么。需要检查一些特殊选项,这些选项可以指向Qt 6中不支持的代码部分。Clazy 也能够自动修复这些警告。

在移植过程中有用的选项:

  • qt6-deprecated-api-fixes 
  • qt6-header-fixes 
  • qt6-qhash-signature 
  • qt6-fwd-fixes 
  • missing-qobject-macro 

 可以在首选项→分析器→Clang工具→诊断配置中更改延迟配置。

 在移植过程中有用的选项:

输出示例。

必要时使用 Qt5Compat 模块。 

在第2步中,提到了一个名为Qt5Compat模块?

引入该模块是为了更好的进行迁移和过渡。它提供了Qt 6中消失的一些类,例如QRegExp和QStringRef,但由于这一点,它仍然可以在Qt 6应用程序中使用。比如某些模块在Qt 6中消失了,但将在下一个版本中作为MultiEffect重新引入。因此,在此期间,可以暂时使用Qt5Compat模块来确保兼容性。但是当MultiEffect模块可用时,应该重写代码以切断过时的API。

如何将模块导入到项目中:

 头文件包含也需要更改:

最后,请做好相关测试。

相关文章:

Qt5升级到Qt6分步迁移教程

Qt框架的一个新的长期支持版本6.5最近发布。它为以前的版本引入了许多修复、改进和新功能。有些可能对您的应用程序有用(如果不是现在,可能会在将来),因此最好将应用程序迁移到最新版本的框架。 仍然有许多应用程序仍在使用Qt 5&…...

多线程学习之线程池

线程状态 线程状态具体含义NEW一个尚未启动的线程的状态。也称之为初始、开始状态。线程刚被创建,但是并未启动。还没调用start方法。MyThread t new MyThread()只有线程对象,没有线程特征。RUNNABLE当我们调用线程对象的start方法,那么此时…...

Elasticsearch基础

1、简介 Elasticsearch是实时的分布式搜索分析引擎,内部使用Lucene做索引与搜索。 何谓实时?新增到 ES 中的数据在1秒后就可以被检索到,这种新增数据对搜索的可见性称为“准实时搜索”。分布式意味着可以动态调整集群规模,弹性扩…...

论文阅读:Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks

前言 要弄清MAML怎么做,为什么这么做,就要看懂这两张图。先说MAML**在做什么?**它是打着Mate-Learing的旗号干的是few-shot multi-task Learning的事情。具体而言就是想训练一个模型能够使用很少的新样本,快速适应新的任务。 定…...

基于Web的旅游推荐网站设计与实现(论文+源码)_kaic

【摘 要】 当前,众所周知的旅游产业已慢慢成为全世界经济领域中最具代表影响力和最大领域的产业之一,互联网的蓬勃发展也为旅游业带来了新的机遇。并且旅游网站已经逐渐成为管理旅游信息的主要模式。因此,开发一个稳定性良好、可用性强的旅游…...

继承AndroidView Model的错误

ViewModelProvider(this)[RegisterViewModel::class.java] 一行简单的代码,总是报这个错误 Caused by: java.lang.NoSuchMethodException: com.xinfa.registerlogin.viewmodel.LoginViewModel. [class android.app.Application] 经过一下午的思索,终于找…...

智慧互联,有序充电--多场景充电

企业微电网能效及充电管理解决方案 安科瑞 崔丽洁 1、企业需求(目的地充电) 站在企业的角度,除了要主动承担碳达峰、碳中和的社会责任,也需要考虑自身的经营和利润,需要结合企业的现状进行改造 企业微电网平台——与…...

yum install libreoffice‘ returned a non-zero

The command ‘/bin/sh -c yum install libreoffice’ returned a non-zero code: 1 1. 异常信息 Is this ok [y/d/N]: Exiting on user command Your transaction was saved, rerun it with:yum load-transaction /tmp/yum_save_tx.2023-08-28.13-42.EftXfl.yumtx The comman…...

Linux知识点 -- 网络基础(一)

Linux知识点 – 网络基础(一) 文章目录 Linux知识点 -- 网络基础(一)一、网络发展二、协议1.OSI七层模型2.TCP/IP五层(或四层)模型 三、网络传输基本流程1.局域网中的两台主机通信流程2.跨网段的两台主机间…...

【leetcode刷题之路】剑指Offer(4)——分治+排序算法+动态规划

文章目录 8 分治算法8.1 【递归】剑指 Offer 07 - 重建二叉树8.2 【递归】【快速幂】剑指 Offer 16 - 数值的整数次方8.3 【递归】剑指 Offer 33 - 二叉搜索树的后序遍历序列8.4 【递归】【分治】剑指 Offer 17 - 打印从1到最大的n位数8.5 【归并排序】【分治】剑指 Offer 51 -…...

美创科技“签”手柠檬文才学堂,共推高校数据安全建设

近日,由柠檬文才学堂联合中国教育在线、东北财经大学网络教育学院共同主办的“三教统筹下高校继续教育数字化转型研讨”顺利召开。 国内高等院校(高职院校)继续教育分管领导,继续教育学院领导及继续教育信息化、教学教务管理、课程…...

【JAVA基础】数据类型,逻辑控制

❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 文章目录 数据类型整型变量 int长整型变量 long单精度浮点数 float双精度浮点数 double字符类型 char字节…...

计算机竞赛 基于图像识别的跌倒检测算法

前言 🔥 优质竞赛项目系列,今天要分享的是 基于图像识别的跌倒检测算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/…...

计算机竞赛 基于大数据的股票量化分析与股价预测系统

文章目录 0 前言1 课题背景2 实现效果3 设计原理QTChartsarma模型预测K-means聚类算法算法实现关键问题说明 4 部分核心代码5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于大数据的股票量化分析与股价预测系统 该项目较为新颖…...

input子系统

内核分三层 1、事件处理层 2、核心层 3、设备驱动层 当硬件按下,在设备驱动中触发中断,中断程序会将事件上报给核心层 核心层将事件给事件处理层,最后事件处理层控制app应用层的怎么操作将数据发送到用户空间...

mac 10.13.6安装后开发准备工作

git下载安装 xcode旧版安装搜索 brew国内源安装 brew国内源安装地址2 brew更换源 SwitchHosts github hosts nfts磁盘读写工具 更新ssl证书 证书下载 然后备份一下系统原来的pem文件 cp /etc/ssl/cert.pem /etc/ssl/cert.bak.pem 之后将新下载的pem文件,拷贝到/etc…...

C++ using关键字

C using关键字 using关键字用来简化代码和提高可读性。 using关键字提供了一种灵活的方式,可以在C中导入命名空间和定义别名。 1. 导入命名空间 using namespace 可以将一个命名空间中的所有名称导入到当前作用域中,从而可以直接使用该命名空间中的所…...

让你对es有一个初步的了解

首先es在海量数据的搜索能力非常好,es你可以把他看成一个搜索引擎数据库,他是个非关系型数据库。他的语法有很大的不同,好像都是json风格的。还有一点需要说的就是es 的数据是存在硬盘上的, 我们先来看一下mysql和es的区别吧。一…...

编绎和优化,脚本代码小米加步枪赶超英法美

编程达人:冰冻牡蛎 测试,总结》》 今有空,继续看了一下竹笋大师几天前提出的“使用for循环查找10亿内可被7整除的数的个数”的题目(相关文件:群文件 10亿以内多少个数字可以整除7.7z ) 1. 论输出的exe大小…...

数字电路-二进制学习

什么是二进制? 数字电路 中 只有 高电平 和低电平 就是 1 和0 进位规则是“逢二进一”,借位规则是“借一当二”。 二进制、八进制 、十进制、十六进制 二进制 有两个数来表示 : 0、1 八进制 有8个数来表示 : 0、1、2、3、4、…...

华为云AI开发平台ModelArts

华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

day36-多路IO复用

一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程

鸿蒙电脑版操作系统来了,很多小伙伴想体验鸿蒙电脑版操作系统,可惜,鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机,来体验大家心心念念的鸿蒙系统啦!注意:虚拟…...

Python第七周作业

Python第七周作业 文章目录 Python第七周作业 1.使用open以只读模式打开文件data.txt,并逐行打印内容 2.使用pathlib模块获取当前脚本的绝对路径,并创建logs目录(若不存在) 3.递归遍历目录data,输出所有.csv文件的路径…...