g***@nokia.com
2011-09-05 09:41:49 UTC
Hi,
We are getting closer to the point where we integrate the Qt refactor branch. What this branch does is that it separates most of Qt's desktop widgets along with a number of currently less actively developed modules into their own libraries, in accordance with the module maturity list we published earlier this year and in line with Lars' blog about the intent of Qt 5. The over all goal is to simplify our graphics stack, minimize our platform/device dependent layer (lighthouse integration) and make sure QML and OpenGL are prime citizens in Qt 5.
These branches are not at feature parity with Qt 4.7 yet, and nor will they be for a quite some time. But we want to push the changes into the master codeline so that the structure we have mentioned in blogs and other forums gets visible in terms of code.
Currently we have "official" support for single-window, QML 2 based on OpenGL on Linux/X11, Linux/XCB, Linux/Wayland and Mac OS X. There is some rudimentary support for the same setup on Windows, but it is still work in progress. Our stack works on top of Software Mesa (very slow), LLVMpipe (very fast) in addition to real OpenGL hardware (usually fastest).
Standard widget based applications still works, but they are not our current priority. We will pick this up once the QML 2 stack is more complete.
We're expecting to merge into master in 1-2 weeks time.
What are the changes in practice?
- code that use widgets need to add "QT += widgets" in their .pro file
- code that includes <QtGui/QLabel> or similar needs to be updated to <QtWidgets/QLabel>. The helper script "fixqt4headers" in QTDIR/bin does this for you. Run it in the root directory and you are done.
- There is a new suite of OpenGL classes inside QtGUI, named QOpenGLXxx which integrates tightly with lighthouse. To keep changes to existing code minimal, we decided to keep the existing libQtOpenGL classes pretty much as is without any changes, and rather introduce new classes in QtGui for the classes we wanted.
- Printing support has been moved into its own library, libQtPrintSupport. We have a long term plan of creating a better printing API, covered inhttps://bugreports.qt.nokia.com//browse/QTBUG-19951, so we have spent some effort in removing the dependency on the current API's from the "Qt essentials". The API is unchanged.
Can I expect any performance changes?
- No. This is about removing a large chunk of code to make our stack simpler to maintain and to have smaller footprint.
What can I plan for?
- In new projects, see if you can use QML 2 instead of QWidgets.
- In new projects, see if you can use QML 2 instead of QML 1.
- In new projects, see if you can use V8 instead of QtScript. (QJSValue and QJSEngine classes in libQtDeclarative)
- In new projects, see if you can use OpenGL functionality in QtGui instead of libQtOpenGL.so
What does this means for you right away?
- If you upgrade to Qt5 with refactor, you need to update the includes and add widgets/script/qtquick1 to your .pro files
What does this means long term?
- None of the existing libraries
I hope this transition will be as painless as possible for everyone. If you have further questions, don't hesitate to ask
-
Gunnar
We are getting closer to the point where we integrate the Qt refactor branch. What this branch does is that it separates most of Qt's desktop widgets along with a number of currently less actively developed modules into their own libraries, in accordance with the module maturity list we published earlier this year and in line with Lars' blog about the intent of Qt 5. The over all goal is to simplify our graphics stack, minimize our platform/device dependent layer (lighthouse integration) and make sure QML and OpenGL are prime citizens in Qt 5.
These branches are not at feature parity with Qt 4.7 yet, and nor will they be for a quite some time. But we want to push the changes into the master codeline so that the structure we have mentioned in blogs and other forums gets visible in terms of code.
Currently we have "official" support for single-window, QML 2 based on OpenGL on Linux/X11, Linux/XCB, Linux/Wayland and Mac OS X. There is some rudimentary support for the same setup on Windows, but it is still work in progress. Our stack works on top of Software Mesa (very slow), LLVMpipe (very fast) in addition to real OpenGL hardware (usually fastest).
Standard widget based applications still works, but they are not our current priority. We will pick this up once the QML 2 stack is more complete.
We're expecting to merge into master in 1-2 weeks time.
What are the changes in practice?
- code that use widgets need to add "QT += widgets" in their .pro file
- code that includes <QtGui/QLabel> or similar needs to be updated to <QtWidgets/QLabel>. The helper script "fixqt4headers" in QTDIR/bin does this for you. Run it in the root directory and you are done.
- There is a new suite of OpenGL classes inside QtGUI, named QOpenGLXxx which integrates tightly with lighthouse. To keep changes to existing code minimal, we decided to keep the existing libQtOpenGL classes pretty much as is without any changes, and rather introduce new classes in QtGui for the classes we wanted.
- Printing support has been moved into its own library, libQtPrintSupport. We have a long term plan of creating a better printing API, covered inhttps://bugreports.qt.nokia.com//browse/QTBUG-19951, so we have spent some effort in removing the dependency on the current API's from the "Qt essentials". The API is unchanged.
Can I expect any performance changes?
- No. This is about removing a large chunk of code to make our stack simpler to maintain and to have smaller footprint.
What can I plan for?
- In new projects, see if you can use QML 2 instead of QWidgets.
- In new projects, see if you can use QML 2 instead of QML 1.
- In new projects, see if you can use V8 instead of QtScript. (QJSValue and QJSEngine classes in libQtDeclarative)
- In new projects, see if you can use OpenGL functionality in QtGui instead of libQtOpenGL.so
What does this means for you right away?
- If you upgrade to Qt5 with refactor, you need to update the includes and add widgets/script/qtquick1 to your .pro files
What does this means long term?
- None of the existing libraries
I hope this transition will be as painless as possible for everyone. If you have further questions, don't hesitate to ask
-
Gunnar