its Qt application framework to version
4.6 on December 1st, adding support for
several operating systems — most notably its own mobile platforms:
the recently open source Symbian and the
Linux-based Maemo. Qt 4.6 introduces
new graphics features, new input methods, and updates to the QtScript
scripting engine. Along with the framework itself, Nokia updated its
cross-platform Qt integrated development environment (IDE) Qt Creator to
support the new features and new target platforms.
Previous releases of Qt have supported Linux, similar X11-based Unix
clones, Mac OS X, and Windows desktop operating systems, plus embedded
Linux systems and the Windows smartphone platforms (Windows CE and Windows
Mobile). Qt 4.6 updates the proprietary platform support to the latest
offerings from Apple and Microsoft: Mac OS X 10.6 and Windows 7.
More interesting to open source users is the official addition of three
mobile platforms to the line-up: Symbian S60, Maemo 5 "Fremantle," and the
still-in-development Maemo 6 "Harmattan." S60 was Nokia's platform of
choice for high-end smartphones for years, but its recent moves indicate it
is positioning Symbian as a lower-end phone operating system and
cultivating Maemo for high-end devices. "Preview" Qt releases for both S60
and Maemo 5 have been periodically released over the past year, but the
platforms' official support in 4.6 is new.
Given that the first Maemo 5 device (Nokia's N900) only started shipping
in November, support for Maemo 6 may sound premature. The early release is
in line with Nokia's past Maemo development behavior, however. The core
Nokia-developed applications in Maemo 6 will be rewritten in Qt instead of
GTK+ and Hildon, and Qt will be designated the officially supported toolkit
for application development. Nokia has long tried to get development tools
into the hands of the open source community as early as possible to
accelerate Maemo application development, and the Maemo 6 shift in toolkits
is undoubtedly a disruption the company wants to minimize.
Inside the release
The headlining new features in 4.6 are the Qt Animation
Framework and State Machine
Framework. The two APIs work together; more generally the state
machine framework allows application developers to construct their code
around state graphs, in which the system reacts to stimuli such as user
input by changing between pre-defined states — hopefully leading to
better dynamic user interfaces. As the documentation points out, writing a
state-based application is not required, and simple applications may not
see the benefit. But using the state machine does open up some other
useful APIs, including animation.
The animation framework allows developers to animate transitions between
states, rather than defining animations as timeline-based behavior
triggered by events. The animation framework automatically interpolates
between the "start" and "stop" states of the animated object, and handles
pausing, synchronizing multiple animations, and other details.
Two new input methods debut in 4.6, gesture input and multi-touch.
Multi-touch builds on the existing touch-sensitive interface of the QTouchEvent class.
Qt now handles multiple QTouchEvents simultaneously, and can send different
events to different widgets, or to the same widget. The framework
maintains backward-compatibility with older code by translating
QTouchEvents into QMouseEvents for multi-touch unaware applications.
Gestures are built on top of multi-touch, as gestures may involve
multiple touch points. The QGestureEvent
class provides gesture descriptions and handling.
class allows Qt to perform basic visual effects on arbitrary elements,
including blurring, drop-shadowing, colorization, and changing opacity.
There are also new classes in 4.6 to handle audio, and
API to simplify writing 3-D applications.
Nokia highlights several changes as "performance optimizations." Some,
like a new renderer for the QGraphicsView class, are enhancements to
existing features. Others, such as the QContiguousCache
class (which enables more efficient memory caching by keeping larger chunks
of cached data in contiguous locations) and hardware-acceleration for 2-D
vector graphics via the OpenVG
API, qualify as new features in their own right.
Several key pieces of code for web integration made their way into 4.6.
considerably faster. The QWebElement class
provides an API to access and manipulate the document object model (DOM) of
both web pages and XML documents.
Qt Creator and ... world domination?
Creator IDE was bumped to version 1.3 when Qt 4.6 was released
and supports the new features of the toolkit. The official changelog
details a long list of improvements, most of which fall under the category
of regular enhancements to a still-growing IDE: improved syntax
highlighting and semantic parsing, better searching, better code
refactoring, and so on.
It is telling, however, that here again Nokia's press releases lead off
with the fact that Qt Creator now supports Symbian as a target platform.
Nokia's corporate interest is in building Qt into a cross-platform toolkit
and SDK that can run on every platform available. Linux users may
occasionally lose sight of that fact because of the framework's prominence
in desktop projects like KDE (which will be migrating to 4.6 in
version 4.4.0). But in the broader technology market, the sheer number
of Symbian-powered phones (half of all smartphones, on the order of
hundreds of millions) dwarfs the desktop Linux market easily.
Symbian is now open source, of course, following its 2008 acquisition by
Nokia. Maemo may be the company's ace in the hole for future smartphone
products, but Qt is the tool it will use to keep the programmers developing
for those millions of smartphones from migrating to other platforms as
Fortunately for open source users, Nokia seems to be working
well with the community. In addition to its code contributions, Nokia has also opened up the
Qt development process itself, accepting around
160 code contributions from outside the company, and making the source code repository and official bug tracker publicly accessible.
Qt 4.6 adds some exciting new features, including multi-touch gestures and
an easy-to-use animation API. But the open development process that
brought it to market is just as welcome.
to post comments)