将应用程序从PySide2移植到PySide6¶
模块可用性¶
Qt for Python 6.2.0 提供了所有计划包含在 Qt 6 中的模块。
模块级别的更改¶
模块 QtMacExtras、Qt Quick Controls 1、QtWinExtras、 QtXmlPatterns 和 QtX11Extras 已被移除。
QStateMachine及相关类已被提取到一个新的 QtStateMachine 模块中。模块 QtWebKit 和 QtWebKitWidgets 已被新的 QtWebEngineCore、QtWebEngineQuick 和 QtWebEngineWidgets 模块取代。
QXmlReader及相关类(SAX API)已被移除。QtOpenGL 模块的内容已被替换。类
QGLWidget及相关类(QGLContext、QGLFunctions、QGLShaderProgram)已被移除。QtGui 中的部分 Open GL 功能已被提取到此模块中,例如QOpenGLBuffer和QOpenGLShaderProgram。 有一个新的模块 QtOpenGLWidgets,其中包含类QOpenGLWidget,它是QGLWidget的替代品。
随着Open GL逐渐淘汰, QRhi应该被考虑用于图形应用程序。
导入¶
移植应用程序时首先要做的是替换导入语句:
from PySide2.QtWidgets import QApplication
from PySide2 import QtCore
需要更改为:
from PySide6.QtWidgets import QApplication
from PySide6 import QtCore
一些类现在位于不同的模块中,例如
QAction 和 QShortcut 已经从 QtWidgets 移动到 QtGui。
对于Qt Charts和Qt Data Visualization,额外的命名空间已被移除。现在可以使用:
from PySide6.QtCharts import QChartView
直接地。
类/函数弃用¶
然后,需要检查代码库中是否使用了已弃用的API,并相应地进行调整。例如:
高DPI缩放属性
Qt.AA_EnableHighDpiScaling、Qt.AA_DisableHighDpiScaling和Qt.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 中找到。