将应用程序从PySide2移植到PySide6

模块可用性

Qt for Python 6.2.0 提供了所有计划包含在 Qt 6 中的模块。

模块级别的更改

  • 模块 QtMacExtrasQt Quick Controls 1QtWinExtrasQtXmlPatternsQtX11Extras 已被移除。

  • QStateMachine 及相关类已被提取到一个新的 QtStateMachine 模块中。

  • 模块 QtWebKitQtWebKitWidgets 已被新的 QtWebEngineCoreQtWebEngineQuickQtWebEngineWidgets 模块取代。

  • QXmlReader 及相关类(SAX API)已被移除。

  • QtOpenGL 模块的内容已被替换。类 QGLWidget 及相关类(QGLContextQGLFunctionsQGLShaderProgram)已被移除。QtGui 中的部分 Open GL 功能已被提取到此模块中,例如 QOpenGLBufferQOpenGLShaderProgram。 有一个新的模块 QtOpenGLWidgets,其中包含类 QOpenGLWidget,它是 QGLWidget 的替代品。

随着Open GL逐渐淘汰, QRhi应该被考虑用于图形应用程序。

导入

移植应用程序时首先要做的是替换导入语句:

from PySide2.QtWidgets import QApplication
from PySide2 import QtCore

需要更改为:

from PySide6.QtWidgets import QApplication
from PySide6 import QtCore

一些类现在位于不同的模块中,例如 QActionQShortcut 已经从 QtWidgets 移动到 QtGui

对于Qt ChartsQt Data Visualization,额外的命名空间已被移除。现在可以使用:

from PySide6.QtCharts import QChartView

直接地。

类/函数弃用

然后,需要检查代码库中是否使用了已弃用的API,并相应地进行调整。例如:

  • 高DPI缩放属性 Qt.AA_EnableHighDpiScalingQt.AA_DisableHighDpiScalingQt.AA_UseHighDpiPixmaps 已被弃用。在Qt 6中,默认启用了高DPI,并且无法关闭。

  • QDesktopWidget 已被移除。应改用 QScreen, 可以使用 QWidget.screen()QGuiApplication.primaryScreen()QGuiApplication.screens() 来获取。

  • QFontMetrics.width() 已更名为 horizontalAdvance()

  • QMouseEvent.pos()QMouseEvent.globalPos() 返回一个 QPoint 以及 QMouseEvent.x()QMouseEvent.y() 返回 int 现在已被弃用。应该使用 QMouseEvent.position()QMouseEvent.globalPosition() 返回一个 QPointF 来代替。

  • Qt.MidButton 已更名为 Qt.MiddleButton

  • QOpenGLVersionFunctionsFactory.get() 而不是 QOpenGLContext.versionFunctions() 应该被用来获取 Open GL 函数。

  • QRegExp 已被 QRegularExpression 替换。

  • QWidget.mapToGlobal()QWidget.mapFromGlobal() 现在也接受并返回 QPointF

  • 名为 exec_ 的函数(类 QCoreApplication, QDialog, QEventLoop)已重命名为 exec,这在 Python 3 中成为可能。

更多信息可以在 Porting to Qt 6 指南 和 Qt 6.2 Documentation 中找到。