将应用程序从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 中找到。