Qt or Symbian C++? [closed]
I am planing to develop on Symbian systems but I am not familiar with it. I know (might be) the most popular way of developing on Symbian is Symbian C++, and I also heard of Qt. What's the difference between them? If I want my app run on most of the Symbian systems, which should I choose? Can someone give me some overall advices?
Symbian C++ is the dialect of C++ in which the operating system is written, all the way from the kernel up to the application framework. It differs from standard C++ in a number of ways, some of which are listed here:
- Exceptions are not used; Symbian uses its own method of stack unwinding called 'leaves'. The main reason for this is that the C++ standard was still in development when Symbian was created, and exceptions were at that time not widely supported by compilers.
- Because of the lack of support for exceptions, management of dynamically allocated memory uses a proprietary mechanism called the cleanup stack.
- Although a port of the STL is now available for Symbian, this is a recent development, so the OS has its own utility classes for strings, arrays, hashes etc.
Taken together, these can make learning Symbian C++ pretty difficult, even for seasoned C++ programmers. The cleanup stack and string classes (known as descriptors) in particular are usually seen to add quite a lot of overhead to Symbian C++ development.
As with any operating system, in addition to needing to know the native language, you also need to know your way around the libraries which are relevant to your area of development. Symbian has a very rich set of libraries covering large amounts of functionality (threading, IPC, graphics, multimedia, networking, location, messaging, PIM, telephony etc.) Once you get used to the Symbian C++ idioms, these libraries are generally very powerful and offer a feature set at least equal to other platforms. One notable exception is the UI library, known as Avkon, which is now pretty dated when compared to corresponding frameworks on other platforms.
Qt is intended to address some of the issues listed above which tend to put people off native development on Symbian OS. Specifically, it enables a much more modern style of C++ programming, and includes a very advanced set of graphics / UI libraries. Today, Qt is available for installation on most recent Symbian devices. Looking forward, it will form the foundation of a completely new application framework, which will be introduced in the S^4 version of the platform (expected to be in devices shipping from 2011).
One thing I should point out is that, at this point, Qt does not cover all of the functionality of the native libraries. From the list above, while Qt offers abstractions of threads, IPC, graphics, multimedia and networking, its core libraries do not include location, messaging or PIM functionality. So, while you can use Qt to write (for example) an FTP client, a drawing program or a media player, you cannot use it to write a messaging client. Because Qt is C++, you can mix it with native Symbian C++ (dropping down to platform APIs to access messaging for example), but this is somewhat complex.
This functionality gap is being addressed by a project called Qt Mobility, which will introduce Qt libraries covering areas such as location, messaging and PIM.
In summary, if you are new to Symbian, Qt is the application development environment to learn, and doing so has the additional benefit that you can also develop Qt applications on other platforms (since it is a cross-platform toolkit).
Go for Qt. It will be the direction where all of Nokia is going. Plus your program will then probably run on Maemo/Meego too.
There is a comparison of 7 available toolkits -Symbian C++, Qt, Open C\C++, Python, Widgets, Java ME, Flash Lite- here: Hitch Hikers Guide to the Runtime Space
The answer is a bit late, but here's from Symbian C++ on the Nokia Developer wiki:
Symbian C++, the native programming framework for Symbian, is an idiomatic variant of C++ optimised for low memory devices. While Qt is now the recommended native framework creating Symbian apps, we continue to provide access to tools for working with Symbian C++. This continued support enables you to maintain legacy applications and migrate them to the latest versions of the Symbian platform.
It sounds like Qt is now preferred, and new projects should use Qt.