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_BEFORE``0x050F00

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

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

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

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

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。

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

头文件包含也需要更改:

最后,请做好相关测试。

相关推荐
人邮异步社区18 分钟前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大1 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai1 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
এ慕ོ冬℘゜1 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
执明wa1 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio
一次旅行1 小时前
Python+大模型端到端自动化日报系统
开发语言·python·自动化
噢,我明白了3 小时前
java中Excel的导入和导出(EasyExcel)
java·开发语言·excel
mabing9933 小时前
Qt 生成条纹图
开发语言·qt
蓝悦无人机3 小时前
C++基础 — 函数总结
开发语言·c++
糖果店的幽灵3 小时前
langgraph的 MessagesState 解读
java·开发语言·人工智能·windows·langgraph