The long awaited port of Qt to the Symbian platform is set to be delivered later this year. In addition to being able to target a new platform, application developers will now be able to take advantage of new functionality in Qt to ensure their application integrates seamlessly with the underlying mobile operating system. This session features a brief introduction to the Symbian/S60 platform with a focus on mobile application development using Qt for the Symbian platform.
Presentation by Alessandro Portale held during Qt Developer Days 2009.
http://qt.nokia.com/developer/learning/elearning
3. About Me
Jason Barron
Started Began in Switched to
July, 2005 Support Development
Qt for Symbian: bit.ly/qtsymbian 3
4. About Me
Alessandro Portale
09/02 – 01/07 02/07 – 03/08 04/08 – today
Color management Qt tools Qt port to Symbian
Qt for Symbian: bit.ly/qtsymbian
5. Goal
• Why use Qt for Symbian?
• Learn what you need to get started.
• Learn how to make great apps on Symbian.
Qt for Symbian: bit.ly/qtsymbian
6. Agenda
• Getting Started
• Application Development
• UI Types
• New “Mobile-esque” Features in 4.6
• Advanced integration
Qt for Symbian: bit.ly/qtsymbian
7. Why use Qt for Symbian?
1. Symbian is a relevant mobile platform.
2. Qt is an easy way to access Symbian.
3. Many of you already know Qt!
Qt for Symbian: bit.ly/qtsymbian
8. The Symbian Landscape
Today
S60 3.1, 3.2 S60 5.0
Symbian^1 S^2 S^3 S^4
Qt for Symbian: bit.ly/qtsymbian
10. Free Available From Binaries Can be used to compile
Qt Apps
WINSCW Yes Carbide.c++ Win32* Yes Yes
GCC-E Yes S60 SDK ARM No** Yes
(CodeSourcery)
RVCT No ARM Ltd. ARM Yes Yes
* Win32 binaries run in the Symbian Emulator
** Technically can compile Qt, but libraries containing WSD will not run
Compilers
Qt for Symbian: bit.ly/qtsymbian
11. Agenda
• Getting Started
• Application Development
• UI types
• New “Mobile-esque” Features in 4.6
• Advanced integration
Qt for Symbian: bit.ly/qtsymbian
13. Application Development – From Scratch
• Carbide's Qt project wizard
• Editing the Ui Form
• show(), showMaximized() or
showFullScreen()?
• Running the application in the emulator
• Running the application on the phone
Qt for Symbian: bit.ly/qtsymbian
35. Port an existing application
• Original application on the Desktop
• Carbide's Qt .pro file import
• Running the application in the emulator
• Desktop Ui vs. Mobile Ui
Qt for Symbian: bit.ly/qtsymbian
41. Desktop Ui vs. Mobile Ui
Successful port?
Qt for Symbian: bit.ly/qtsymbian
42. Desktop Ui vs. Mobile Ui
Mobile friendly Ui
Qt for Symbian: bit.ly/qtsymbian
43. Desktop Ui vs. Mobile Ui
Including different Ui headers
Qt for Symbian: bit.ly/qtsymbian
44. Desktop Ui vs. Mobile Ui
Instantiating and showing different Uis
Qt for Symbian: bit.ly/qtsymbian
45. Desktop Ui vs. Mobile Ui
AppController knows the view as QObject
that emits colorChanged()
Qt for Symbian: bit.ly/qtsymbian
46. Desktop Ui vs. Mobile Ui
Both Uis emit a colorChanged() signal
Qt for Symbian: bit.ly/qtsymbian
47. Agenda
• Getting Started
• Application Development
• UI Types
• New “Mobile-esque” Features in 4.6
• Advanced integration
Qt for Symbian: bit.ly/qtsymbian
49. Agenda
• Getting Started
• Application Development
• UI Types
• New “Mobile-esque” Features in 4.6
• Advanced integration
Qt for Symbian: bit.ly/qtsymbian
55. Exceptions
What happens if ‘new’ on line 4 throws std::bad_alloc?
MyWidget::MyWidget(QWidget *parent) : QDialog(parent),
label(new QLabel("Name?", this)),
edit(new QLineEdit(this)),
button(new QPushButton("Ok"))
{
setLayout(new QVBoxLayout);
layout()->addWidget(label);
layout()->addWidget(edit);
layout()->addWidget(button);
}
Qt for Symbian: bit.ly/qtsymbian
56. QScopedPointer
Deletes it’s object when the scope terminates.
class MyWidget: public QDialog
{
Q_OBJECT
public:
MyWidget(QWidget *parent = 0);
private:
#ifdef USE_SCOPED_POINTER
QScopedPointer<QLabel> label;
QScopedPointer<QLineEdit> edit;
QScopedPointer<QPushButton> button;
#else
QLabel *label;
QLineEdit *edit;
QPushButton *button;
#endif
};
Qt for Symbian: bit.ly/qtsymbian
57. Agenda
• Getting Started
• Application Development
• UI Types
• New “Mobile-esque” Features in 4.6
• Advanced integration
Qt for Symbian: bit.ly/qtsymbian
58. Event Dispatcher – Active Scheduler
• Active objects can be used as normal
ActiveScheduler
Qt
Qt for Symbian: bit.ly/qtsymbian
59. Handling Symbian Leaves
• QT_TRAP_THROWING
– Converts leaves to exceptions
• QT_TRYCATCH_ERROR
– Converts exceptions to errors
• QT_TRYCATCH_LEAVING
– Converts exceptions to leaves
Qt for Symbian: bit.ly/qtsymbian
60. RWindow, CCoeControl and QWidget
• QWidget::winId() – Returns a CCoeControl
• Always window owning:
CCoeControl *c = widget->effectiveWinId();
RWindow *rw =
static_cast<RWindow*>(c->DrawableWindow());
Qt for Symbian: bit.ly/qtsymbian
61. Thank You!
Questions?
Qt for Symbian: bit.ly/qtsymbian
62. Reference
• Download an SDK from:
– Forum Nokia (http://forum.nokia.com)
– Samsung Mobile Innovator (http://innovator.samsungmobile.com)
– Symbian Foundation (http://developer.symbian.com)
Qt for Symbian: bit.ly/qtsymbian 62