Qt 6 is around the corner. it needs to be investigated what changes are necessary in Qt6 to enable Qt for Python 6.x releases easier.
The following are just ideas, and need to be discussed with the whole team before making any official statement.
1. Rename the Python module (Qt6 only)
- PySide2 is a confuse name for our module. We should consider a simple rename to keep track with Qt versions.
- Having PySide6 will remove all issues related what's the relationship with Qt5 and Qt6.
- PyQt also follows this approach.
2. Qt tools compatibility
- uic and rcc are almost 100% ready to be Python compatible.
- We could drop pyside2-uic and pyside2-rcc support, and ship uic, and rcc instead.
- The same could be applied to Qt Designer.
3. Drop Python 2 support (Qt6 only)
- Python 2 will be deprecated starting from 01.01.2020, and we need to make a decission.
- An idea could be to keep support for Qt5.X, but leave Qt6 compatible with Python 3.5+ only.
- Provide a set of high level ready-to-use widgets, to quickly represent data from other python modules.
- Avoid boilerplate code in cases we could use a Pythonic approach, e.g.: QtChart Series and QTable* fill.
5. Make PySide more Pythonic (Qt6 only)
- Break Qt API in some places when it's required, e.g.: exec_() -> execute(), QApplication as decorator, etc.
6. Support smart pointers in shiboken
- Qt6 will contain many, and we will need to improve shiboken to properly handle them.
7. Python properties (Qt6 only)
- At the moment QtProperties and Python Properties don't play well, and would need a bit of work to make them 100% functional.
- Qt 6's property system/API may receive an overhaul which in turn imposes changes on Qt for Python 6
- see PYSIDE-1019
8. Support std::function
- (╯°□°）╯︵ ┻━┻
9. Make shiboken_generator easy-to-use
- Currently, even a "Hello World" example require a long and complex CMakeLists.txt to be compiled, this should change.
- Also, shipping shiboken_generator in a better way, to avoid the need of build from source.
10. Separate PySide2 into multiple pip packages
- QtCore package, QtGui package, etc.
- or perhaps at a bigger granularity (QtEssentials, QtWebEngine, QtAddons)
11. Embedded support
- Provide a Yocto-based image that includes Qt for Python,
- Generate wheels for Raspberry Pi https://www.piwheels.org/
12. Investigate QML Support (Qt6 only)
- There's certain missing QML support due to limitations of private API in qtdeclarative. Figure out what needs to be changed to allow easier integration of Python + QML (things like qRegisterUncreatableType PYSIDE-574 or having a maximum amount of possible QML types PYSIDE-811)
- planned Qt6 changes will impose work for Qt for Python
13. Adopt type annotations
- Moving forward to having safer application we can at least type check.
- MyPy, Pyre, Pyright, or Pytype
14. Asyncio support / event loop integration