[Interest] Qt 5 on Mac OS X

Sorvig Morten Morten.Sorvig at digia.com
Thu Dec 20 13:09:33 CET 2012


Hi,

Qt 5 aims to be 98% source compatible with Qt 4. Still, changes has been made to the platform implementation and infrastructure. Not all have been discussed here, so I figured I'd give a brief rundown.

The main issue that everyone should be aware of is that all Qt 5 platform ports are to a large degree rewrites. This means new code. If you find something that is missing it is far more likely that we simply forgot about it rather than it being a part some twisted scheme to break your application.

Now, on the changes where we actually _are_ breaking your application:

* 64bit clang is the default compiler. 
32-bit builds are also supported trough the macx-clang-32 and macx-g++-32 mkspecs.

* No Carbon version
These code paths have been removed. (Some parts of Qt still link against the Carbon framework; this is not a bug)

* 10.6 is the minimal supported version, with some limitations:
- Webkit support for 10.6 is problematic. I'm told that we (Qt) are by now the only ones interested in keeping it running on this platform. For 5.0 webkit will work if you compile Qt with the 10.6 SDK, but it's not clear how long we can sustain that.
- The Qt binary package is compiled against the 10.7 SDK, which means it won't run on 10.6 due to the webkit issue.
- This makes 10.6 is a deployment platform only, similar to what we did for 10.3 (I think) way back.
- You can still build from Qt source on 10.6 and develop using that.

* Raster is the default paint engine for QPainter
CoreGraphics has been retired in favor of the cross-platform raster paint engine. This means way less Mac-specific QPainter bugs and equal performance characteristics on all platforms. Printing still use CoreGraphics (we need to produce vector output).

* High-dpi support
Qt 5 includes basic support for high-dpi for "retina" displays. This is enabled by default and applications will automatically get high-dpi Mac style, QPainter vector graphics, and Qt Quick (2).

* (No) Universal binary support
The Qt build system has been simplified/unified across platforms and we have removed the "universal" build support where you could produce combined 32/64-bit binaries. Our rationale is as follows:
- PPC support has been removed.
- 10.6 requires a machine that can run 64-bit apps, with the minor exception the early 2006 Intel Core Solo/Duo iMacs and MacBooks which lacks 64-bit support.
- This means you can produce either a 32-bit binary or a 64-bit binary which runs on (nearly) all supported systems.
- You can still use the lipo tool if you do want to create an universal app.

* Qt Binary installers
The Qt binary installers have been changed to use a cross-platform installer framework. Qt will now be installed into one location, instead of being spread out in /Devloper, /Library/Frameworks etc. We are aware that his is different than what it used to be, but I think it will work well in practice. I would also like to discourage global Qt installs and instead suggest an approach based on developer builds and self-contained app bundles. (see deployment)

* The unified toolbar
We are removing the existing solution, which was hard to maintain and gave a close-but-not-quite native look and feel. This means that calling QMainWindow::setUnifiedTitleAndToolBarOnMac will have no effect on Qt 5. 

The replacement (QtMacUnifiedToolBar) is based on NSToolBar which gives us perfect native look and feel. QtMacUnifiedToolBar is a part of QtMacExtras

* QtMacExtras
Will host many/all of the mac-spesific APIs found in Qt 4. Available at http://qt.gitorious.org/qtplayground/qtmacextras .

* App store and sandboxing
We have made modifications to Qt to make it work with the Mac App store sandbox. There are Qt apps on the Mac App store, but we don't have a good "This is how you deploy Qt apps to the store" tutorial at this point. 

* Deployment
There are many ways to deploy a Qt application and if you have a big application you are probably writing your own deployment scripts. Biggest change from Qt 4 is that Cocoa platform plugins needs to be deployed. (qtbase/plugins/platforms/libqcocoa.dylib). The macdeployqt deployment utility  has been update to handle the cocoa platform plugin (and other plugins).

That was all for now :)

Morten







More information about the Interest mailing list