Cross-platform development has taken on a whole new level of importance.  The impetus is staggering. Developing and publishing new embedded software is a huge undertaking, one which software publishers would like to minimize. For low-cost widgets, controlling costs is vital.


The holy grail of nearly every development team is to develop and maintain one code base that does not require modifications to operate on a processor or hardware platform architecture.  Recently, Intel Embedded Innovator newsletter and magazine featured two relatively new offerings in this area: Adobe’s AIR and Nokia’s QT products.


Although a substantial number of my Software and Tools blogs have focused on Real Time Embedded Systems, not all embedded software is realtime. Adobe AIR and Nokia QT focus on embedded applications development, primarily for mobile devices. Naturally, most mobile devices today include a cellular telephone as part of the package, but that is quickly becoming just a part of the offering and not the entire reason for choosing a compatible mobile device. Some of the newer mobile devices sell not because they are phones, but because of everything else they can do.


The Adobe AIR application runtime is free for most uses. The downloadable Adobe AIR Software Development Kit (SDK) is also free. There is no specific development tool for building Adobe AIR applications, but web developers can use the IDE of their choice, including Adobe tools such as Eclipse™ based Flash Builder, Flash, Dreamweaver, and Javascript, to build Adobe AIR-based applications. The native language of AIR is Javascript, which is one of the ways that true cross-platform development can happen. While Javascript requires a web browser to be installed in order to execute code, Javascript can be used to develop applications that simply use the browser for required services like screen I/O and keyboard input. The Adobe AIR’s SDK provides a set of command line tools for packaging Adobe AIR applications. This can be used with any text editor to build and deploy an AIR application, underlining the actual nature of the product: it’s a runtime environment first and foremost with a collection of Javascript APIs. On the other hand, AIR enables the publication of applications built using a number of Adobe-based development suite applications. Think of AIR as a platform which enables delivery of applications independent of the underlying hardware.


Nokia’s Qt (pronounced cute) product stands in contrast with AIR. Qt is also a free cross-platform standard. But the two products diverge quickly: Qt provides an application and User Interface (UI) framework based on C++Qt applications can run on a variety of platforms including Microsoft (1) Windows and Linux.

Qt documentation shows programmers how to:



One of the significant differences between AIR and Qt is hinted at by the last item in the above list. Where AIR does not require modification to application source code for each new platform, Qt does require modification.


Let’s look at some examples of Qt code from :

MoviePlayer::MoviePlayer(QWidget *parent)



     movieLabel = new QLabel(tr("No movie loaded"));


     movieLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);





     connect(movie, SIGNAL(frameChanged(int)), this,


     connect(movie, SIGNAL(stateChanged(QMovie::MovieState)),

             this, SLOT(updateButtons()));

     connect(fitCheckBox, SIGNAL(clicked()), this, SLOT(fitToWindow()));

     connect(frameSlider, SIGNAL(valueChanged(int)), this,


     connect(speedSpinBox, SIGNAL(valueChanged(int)),

             movie, SLOT(setSpeed(int)));





This code is straight forward – once you know what the classes do. Qlabel is a Qt class, as are Qwidget and Qmovie. For example, Qmovie is a class for playing a movie with QImageReader. Movies in this case are simple animations without sound. There are other classes for playing movies with sound. Qt has hundreds of classes serving a myriad of useful tasks. But with completeness comes complexity. The list of classes is staggering; becoming proficient in the use of all these classes is a significant undertaking. Programmers are not limited to the predefined classes. As with any C++ program, custom classes may be defined and used in the usual manner.


Qt does not create a single unified interface that homologates all different platforms. Instead, programmers must use a macro processing facility to select between different platform code bases. By comparison, AIR does unify the underlying platform hardware definitions so that one code works on all supported hardware platforms.


AIR and Qt offer two different paradigms to cross-platform development.  AIR relies on the Javascript environment to homologate operating platforms. Qt places the burden of code configuration on the programmers.  Applications developed with many Adobe tools may be directly targeted to the AIR environment while Qt employs C++ as a development tool base, and requires more configuration management. Both are free to use for most applications.


Do you prefer developing in C++ or Javascript? The language defines which product may be right for you.



Henry Davis

Roving Reporter (Intel Contractor)

Intel® Embedded Alliance