将应用程序从 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 的 OpenGL 功能已被提取到该模块中,例如QOpenGLBuffer和QOpenGLShaderProgram。有一个新的模块 QtOpenGLWidgets,其中包含类QOpenGLWidget,它是QGLWidget的替代品。
由于 OpenGL 正在淘汰,对于图形应用程序,应该考虑使用 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已被弃用。在高 DPI 下,Qt 6 默认启用,无法关闭。QDesktopWidget已被移除。应使用QScreen,可以通过QWidget.screen()、QGuiApplication.primaryScreen()或QGuiApplication.screens()来获取。QFontMetrics.width()已更名为horizontalAdvance()。QMouseEvent.pos()和QMouseEvent.globalPos()返回QPoint以及QMouseEvent.x()和QMouseEvent.y()返回int已弃用。应使用返回QPointF的QMouseEvent.position()和QMouseEvent.globalPosition()。Qt.MidButton已更名为Qt.MiddleButton。应使用
QOpenGLVersionFunctionsFactory.get()代替QOpenGLContext.versionFunctions()来获取 Open GL 函数。QRegExp已被QRegularExpression替代。QWidget.mapToGlobal()和QWidget.mapFromGlobal()现在也可以接受和返回QPointF。名字为
exec_的函数(类QCoreApplication、QDialog、QEventLoop)已被更名为exec,这是在 Python 3 中实现的。