1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
Porting Applications from PySide2 to PySide6
============================================
Module Availability
-------------------
Qt for Python 6.2.0 provides all modules planned for inclusion in Qt 6.
Module-Level Changes
--------------------
* The modules *QtMacExtras*, *Qt Quick Controls 1*, *QtWinExtras*,
*QtXmlPatterns* and *QtX11Extras* have been removed.
* ``QStateMachine`` and related classes have been extracted to a new
*QtStateMachine* module.
* The modules *QtWebKit* and *QtWebKitWidgets* have been replaced by the new
*QtWebEngineCore*, *QtWebEngineQuick* and *QtWebEngineWidgets* modules.
* ``QXmlReader`` and related classes (*SAX API*) have been removed.
* The content of the *QtOpenGL* module has been replaced. The class
``QGLWidget`` and related classes (``QGLContext``, ``QGLFunctions``,
``QGLShaderProgram``) have been removed. Parts of the *Open GL*
functionality from *QtGui* have been extracted into this module, for example
``QOpenGLBuffer`` and ``QOpenGLShaderProgram``.
There is a new module *QtOpenGLWidgets* which contains the class
``QOpenGLWidget``, a replacement for ``QGLWidget``.
As *Open GL* is phasing out,
`QRhi <https://doc.qt.io/qt-6/topics-graphics.html>`_ should be considered
for graphics applications.
Imports
-------
The first thing to do when porting applications is to replace the
import statements:
.. code-block:: python
from PySide2.QtWidgets import QApplication
from PySide2 import QtCore
needs to be changed to:
.. code-block:: python
from PySide6.QtWidgets import QApplication
from PySide6 import QtCore
Some classes are in a different module now, for example
``QAction`` and ``QShortcut`` have been moved from ``QtWidgets`` to ``QtGui``.
For *Qt Charts* and *Qt Data Visualization*, the additional namespaces have been
removed. It is now possible to use:
.. code-block:: python
from PySide6.QtCharts import QChartView
directly.
Class/Function Deprecations
---------------------------
Then, the code base needs to be checked for usage of deprecated API and adapted
accordingly. For example:
* The High DPI scaling attributes ``Qt.AA_EnableHighDpiScaling``,
``Qt.AA_DisableHighDpiScaling`` and ``Qt.AA_UseHighDpiPixmaps`` are
deprecated. High DPI is by default enabled in Qt 6 and cannot be turned off.
* ``QDesktopWidget`` has been removed. ``QScreen`` should be used instead,
which can be retrieved using ``QWidget.screen()``,
``QGuiApplication.primaryScreen()`` or ``QGuiApplication.screens()``.
* ``QFontMetrics.width()`` has been renamed to ``horizontalAdvance()``.
* ``QMouseEvent.pos()`` and ``QMouseEvent.globalPos()`` returning a ``QPoint``
as well as ``QMouseEvent.x()`` and ``QMouseEvent.y()`` returning ``int``
are now deprecated. ``QMouseEvent.position()`` and
``QMouseEvent.globalPosition()`` returning a ``QPointF`` should be used
instead.
* ``Qt.MidButton`` has been renamed to ``Qt.MiddleButton``.
* ``QOpenGLVersionFunctionsFactory.get()`` instead of
``QOpenGLContext.versionFunctions()`` should be used to obtain
*Open GL* functions.
* ``QRegExp`` has been replaced by ``QRegularExpression``.
* ``QWidget.mapToGlobal()`` and ``QWidget.mapFromGlobal()`` now also accept
and return ``QPointF``.
* Functions named ``exec_`` (classes ``QCoreApplication``, ``QDialog``,
``QEventLoop``) have been renamed to ``exec`` which became possible
in Python 3.
More information can be found in the
`Porting to Qt 6 <https://doc.qt.io/qt-6/portingguide.html>`_ Guide
and the `Qt 6.2 Documentation <https://doc.qt.io/qt-6/index.html>`_ .
|