首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt6与Qt5向后兼容性

Qt6与Qt5向后兼容性
EN

Stack Overflow用户
提问于 2020-12-08 15:08:06
回答 2查看 2.9K关注 0票数 1

假设我有Qt5项目。Qt6已经发布,我想将我的项目移到它上,但是我也希望能够用Qt5构建我的项目。我知道Qt5 API与Qt6不兼容。那么,我的问题是Qt6 API向后兼容Qt5 API吗?如果我要修复所有要用Qt6构建的问题,那么项目会使用Qt5构建吗?

例如,在Qt6中没有QVBoxLayout::setMargin()方法,而是存在QLayout::setContentsMargins()。这意味着在本例中,Qt6与Qt5向后兼容。

但是否存在与Qt5向后兼容的水下结石?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-09 00:57:39

兼容性不是黑白的。大多数Qt 5代码(就代码行而言)与Qt 6兼容,但您可能使用的一些特定构造并不兼容。这并不会自动使事情“不兼容”,因为可能还有其他结构可以在Qt 5和Qt 6中使用。而且,任何特定项目所遇到的不兼容性程度都很大程度上取决于项目的范围、设计的惯用性等等。

在当前Qt 5项目中添加

  1. ,将QT_DISABLE_DEPRECATED_BEFORE=0x060000定义添加到项目中。这将禁用您可能正在使用的所有过时API。我想会有几个错误,你必须修复。阅读Qt 6中可能提供的代码迁移工具。这是一个准备步骤:它不会使您的代码与Qt 5不兼容,它只会禁用Qt 6中删除的Qt 5的所有部分,但在Qt 5和Qt 6中都有跨兼容的替代方案。

然后,在Qt 6下构建

  1. 并查看问题所在。您的qmake项目文件不需要更改(很可能),但如果使用cmak.

,则需要在qmake中选择Qt 6。

  1. 一开始以最简单的方式解决这些问题--使用预处理条件--希望您只需要处理几个需要这样做的地方。

  1. 现在已经有了一个构建了Qt 5和Qt 6的项目,并且很有希望主要在Qt 5和Qt 6中运行,您可以评估是否可以重构代码以提出一个交叉兼容的变体,或者您可以筛选出一些方法/类,这些方法/类可以抽象出您所经历的不兼容的更改,因此,预处理器定义将集中在一个模块中,而不是分散在所有模块中。
票数 4
EN

Stack Overflow用户

发布于 2020-12-08 23:39:39

简短的回答是否定的,Qt6与Qt5不向后兼容。例如,与事件系统不同.

在Qt5是QWidget::enterEvent( QEvent * ),而在Qt 6中有QWidget::enterEvent( QEnterEvent * ).

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65201468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档