In 2007, Nokia introduced standard C libraries for the Symbian OS. At that time, we wrote an article for Dr. Dobb's by the name of "Open C: Paving the Way for Porting." Standard C infrastructure libraries can be found on all major operating systems today. With standard C libraries also in Symbian OS, application development became significantly easier, as did porting existing applications across different operating systems.
This time, we extend from the cross-platform standard C libraries to a full native application development for Symbian with Qt. Qt is a cross-platform native development framework for all major operating systems, including Linux, Windows, Mac, Symbian, and Maemo. This article explores developing applications with Qt for Symbian OS and deploying them on Nokia Ovi Store.
Qt supports Symbian-based S60 3.1, 3.2, 5.0 and the latest Symbian^3 devices. Today, Symbian holds the position of world's largest smart phone platform. We'll focus on writing applications with Qt, and deploying them on Ovi Store. Please note that most of the steps presented here are valid for other operating systems as well, but we'll focus on the Symbian environment.
First, let's take a look at the components available for developers with Qt and Qt Mobility APIs. Then we'll delve into the Qt SDK, its IDE, Qt Creator, and the simulator. This will be followed by running an example on the simulator and the actual hardware. Once our application is done, we will demonstrate how to get it signed and deploy it on the Ovi store.
Qt SDK is an all-in-one installation package that has environments for desktop, Symbian, and Maemo/MeeGo development. The SDK incorporates the latest version of the Qt framework and the IDE, Qt Creator. It is designed to provide all the resources you need to create great apps easily for both desktop platforms and mobile devices. To further support mobile development, the Qt SDK contains mobility extensions called Qt Mobility APIs, support for on-device debugging, and Qt Simulator to enable quick mobile development on desktops.
The cross platform library Qt APIs are:
- QtCore: Core non graphical classes used by other modules
- QtGui: Graphical user interface (GUI) components
- QtMultimedia: Classes for low level multimedia functionality
- QtNetwork: Classes for network programming
- QtOpenGL: OpenGL support classes
- QtOpenVG: OpenVG support classes
- QtScript: Classes for evaluating Qt Scripts
- QtScriptTools: Additional Qt Script components
- QtSql: Classes for database integration using SQL
- QtSvg: Classes for displaying the contents of Scalable Vector Graphics files
- QtWebKit: Classes for displaying and editing Web content
- QtXml: Classes for handling XML
- QtXmlPatterns: An XQuery & XPath engine for XML and custom data models
- QtDeclarative: An engine for declaratively building fluid user interfaces, also known as Qt Quick/QML
- Phonon: Multimedia framework classes
- Qt3Support: Qt 3 compatibility classes (these are legacy support classes which are not supported in MeeGo and Symbian).
The Qt Mobility APIs are:
- Bearer Management API: An API to control the system's internet connectivity state.
- Camera API: Provides a framework to use Camera device features when supported by the platform.
- Contacts API: An API enabling clients to request contact data from local or remote back ends.
- Document Gallery API: Enables applications to search, filter and manipulate the meta data of files in local file system.
- Feedback API: Allows applications to produce tactile feedback.
- Landmarks API: As part of the Location API, it allows applications to create, retrieve, update and delete landmarks.
- Location API : The Location API provides a library for distributing and receiving location data using arbitrary data sources.
- Maps/Navigation API: Provides an API to access maps, landmarks and route information for navigation.
- Messaging API: The Messaging API enables access to messaging services.
- Multimedia API: Provides a set of APIs to play and record media, and manage a collection of media content.
- Organizer API: Provides an interface to create, update, delete and share various organizer items such as events and to-do items
- Publish and Subscribe API: The Publish and Subscribe API, containing Value Space, enables applications to read item values, navigate through and subscribe to change notifications.
- Service Framework API: A set of Qt APIs to that allows clients to discover and instantiate arbitrary services.
- Sensors API: The Sensors API provides access to sensors.
- System Information: A set of APIs to discover system related information and capabilities.
- Versit API: An API to manage Versit documents such as vCards.