假设我有Qt5项目。Qt6已经发布,我想将我的项目移到它上,但是我也希望能够用Qt5构建我的项目。我知道Qt5 API与Qt6不兼容。那么,我的问题是Qt6 API向后兼容Qt5 API吗?如果我要修复所有要用Qt6构建的问题,那么项目会使用Qt5构建吗?
例如,在Qt6中没有QVBoxLayout::setMargin()方法,而是存在QLayout::setContentsMargins()。这意味着在本例中,Qt6与Qt5向后兼容。
但是否存在与Qt5向后兼容的水下结石?
发布于 2020-12-09 00:57:39
兼容性不是黑白的。大多数Qt 5代码(就代码行而言)与Qt 6兼容,但您可能使用的一些特定构造并不兼容。这并不会自动使事情“不兼容”,因为可能还有其他结构可以在Qt 5和Qt 6中使用。而且,任何特定项目所遇到的不兼容性程度都很大程度上取决于项目的范围、设计的惯用性等等。
在当前Qt 5项目中添加
QT_DISABLE_DEPRECATED_BEFORE=0x060000定义添加到项目中。这将禁用您可能正在使用的所有过时API。我想会有几个错误,你必须修复。阅读Qt 6中可能提供的代码迁移工具。这是一个准备步骤:它不会使您的代码与Qt 5不兼容,它只会禁用Qt 6中删除的Qt 5的所有部分,但在Qt 5和Qt 6中都有跨兼容的替代方案。然后,在Qt 6下构建
,则需要在qmake中选择Qt 6。
发布于 2020-12-08 23:39:39
简短的回答是否定的,Qt6与Qt5不向后兼容。例如,与事件系统不同.
在Qt5是QWidget::enterEvent( QEvent * ),而在Qt 6中有QWidget::enterEvent( QEnterEvent * ).
https://stackoverflow.com/questions/65201468
复制相似问题