Mobile Application Developmentwith Qt for Symbian
Qt for Symbian: bit.ly/qtsymbian
Visit:
bit.ly/qtsymbian...get Qt for your phone
Qt for Symbian: bit.ly/qtsymbian
About Me
Jason Barron
3
Started July, 2005
Began in Support
Switched to Development
Qt for Symbian: bit.ly/qtsymbian
About Me
Alessandro Portale
09/02 – 01/07Color management
02/07 – 03/08Qt tools
04/08 – todayQt port to Symbian
Qt for Symbian: bit.ly/qtsymbian
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
Agenda
• Getting Started
• Application Development
• UI Types
• New “Mobile-esque” Features in 4.6
• Advanced integration
Qt for Symbian: bit.ly/qtsymbian
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
The Symbian Landscape
S60 3.1, 3.2 S60 5.0
Symbian^1 S^2 S^3 S^4
Today
Qt for Symbian: bit.ly/qtsymbian
The Developer’s Shopping List
SDK
IDE
Open C plugin (POSIX)
Qt
Qt for Symbian: bit.ly/qtsymbian
Compilers
Free Available From Binaries Can be used to compile
Qt Apps
WINSCW Yes Carbide.c++ Win32* Yes Yes
GCC-E Yes S60 SDK(CodeSourcery)
ARM No** Yes
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
Qt for Symbian: bit.ly/qtsymbian
Agenda
• Getting Started
• Application Development
• UI types
• New “Mobile-esque” Features in 4.6
• Advanced integration
Qt for Symbian: bit.ly/qtsymbian
Demo
Qt for Symbian: bit.ly/qtsymbian
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
Demonstration
Qt for Symbian: bit.ly/qtsymbian
Carbide's Qt project wizard
Qt for Symbian: bit.ly/qtsymbian
Carbide's Qt project wizard
Qt for Symbian: bit.ly/qtsymbian
Carbide's Qt project wizard
Qt for Symbian: bit.ly/qtsymbian
Carbide's Qt project wizard
Qt for Symbian: bit.ly/qtsymbian
Carbide's Qt project wizard
Qt for Symbian: bit.ly/qtsymbian
Carbide's Qt project wizard
Qt for Symbian: bit.ly/qtsymbian
Editing the Ui Form
Qt for Symbian: bit.ly/qtsymbian
Editing the Ui Form
Qt for Symbian: bit.ly/qtsymbian
Editing the Ui Form
Qt for Symbian: bit.ly/qtsymbian
Editing the Ui Form
Qt for Symbian: bit.ly/qtsymbian
Editing the Ui Form
Qt for Symbian: bit.ly/qtsymbian
Editing the Ui Form
Qt for Symbian: bit.ly/qtsymbian
Adjusting the show() call
Qt for Symbian: bit.ly/qtsymbian
Adjusting the show() call
Qt for Symbian: bit.ly/qtsymbian
Running the application in the emulator
Qt for Symbian: bit.ly/qtsymbian
Running the application in the emulator
Qt for Symbian: bit.ly/qtsymbian
Running the application in the emulator
Qt for Symbian: bit.ly/qtsymbian
Running the application in the emulator
Qt for Symbian: bit.ly/qtsymbian
Building and deploying for the device
Qt for Symbian: bit.ly/qtsymbian
Command Line
C:\qt\...\analogclock> qmake
C:\qt\...\analogclock> make debug-winscwC:\qt\...\analogclock> make release-gcceC:\qt\...\analogclock> make release-armv5
C:\qt\...\analogclock> make sis
Qt for Symbian: bit.ly/qtsymbian
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
Carbide's Qt .pro file import
Qt for Symbian: bit.ly/qtsymbian
Carbide's Qt .pro file import
Qt for Symbian: bit.ly/qtsymbian
Carbide's Qt .pro file import
Qt for Symbian: bit.ly/qtsymbian
Running the application in the emulator
Qt for Symbian: bit.ly/qtsymbian
Running the application in the emulator
Qt for Symbian: bit.ly/qtsymbian
Desktop Ui vs. Mobile Ui
Successful port?
Qt for Symbian: bit.ly/qtsymbian
Desktop Ui vs. Mobile Ui
Mobile friendly Ui
Qt for Symbian: bit.ly/qtsymbian
Desktop Ui vs. Mobile Ui
Including different Ui headers
Qt for Symbian: bit.ly/qtsymbian
Desktop Ui vs. Mobile Ui
Instantiating and showing different Uis
Qt for Symbian: bit.ly/qtsymbian
Desktop Ui vs. Mobile Ui
AppController knows the view as QObjectthat emits colorChanged()
Qt for Symbian: bit.ly/qtsymbian
Desktop Ui vs. Mobile Ui
Both Uis emit a colorChanged() signal
Qt for Symbian: bit.ly/qtsymbian
Agenda
• Getting Started
• Application Development
• UI Types
• New “Mobile-esque” Features in 4.6
• Advanced integration
Qt for Symbian: bit.ly/qtsymbian
UI Types
Qt for Symbian: bit.ly/qtsymbian
Agenda
• Getting Started
• Application Development
• UI Types
• New “Mobile-esque” Features in 4.6
• Advanced integration
Qt for Symbian: bit.ly/qtsymbian
qmake Keywords
• MMP_RULES• BLD_INF_RULES
• TARGET– .UID3– .EPOCHEAPSIZE– .CAPABILITY
• DEPLOYMENT• ICON
• QMAKE_CXXFLAGS– .ARMCC– .WINSCW
Qt for Symbian: bit.ly/qtsymbian
Input Method Hints
… QWidget::inputMethodHints() const;
void QWidget::setInputMethodHints(…);
Qt for Symbian: bit.ly/qtsymbian
Input Method Hints
• Change Behavior:– Qt::ImhHiddenText– Qt::ImhNoAutoUppercase– Qt::ImhPreferNumbers– Qt::ImhPreferUppercase– Qt::ImhPreferLowercase– Qt::ImhNoPredictiveText
• Restrict Input:– Qt::ImhDigitsOnly– Qt::ImhFormattedNumbersOnly– Qt::ImhUppercaseOnly– Qt::ImhLowercaseOnly– Qt::ImhDialableCharactersOnly– Qt::ImhEmailCharactersOnly
• Masks:– Qt::ImhExclusiveInputMask
Qt for Symbian: bit.ly/qtsymbian
Soft keys
QAction::setSoftKeyRole(…);…QAction::softKeyRole() const;
enum SoftKeyRole {QAction::NoSoftKey, //(default)QAction::PositiveSoftKey,QAction::NegativeSoftKey,QAction::SelectSoftKey,}
Qt for Symbian: bit.ly/qtsymbian
Navigation Modes
void QApplication::setNavigationMode(...);... QApplication::navigationMode();
enum NavigationMode {NavigationModeNone,NavigationModeKeypadTabOrder,NavigationModeKeypadDirectional,NavigationModeCursorAuto,NavigationModeCursorForceVisible
};
Qt for Symbian: bit.ly/qtsymbian
Exceptions
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);
}
What happens if ‘new’ on line 4 throws std::bad_alloc?
Qt for Symbian: bit.ly/qtsymbian
QScopedPointer
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;
#elseQLabel *label;QLineEdit *edit;QPushButton *button;
#endif};
Deletes it’s object when the scope terminates.
Qt for Symbian: bit.ly/qtsymbian
Agenda
• Getting Started
• Application Development
• UI Types
• New “Mobile-esque” Features in 4.6
• Advanced integration
Qt for Symbian: bit.ly/qtsymbian
Event Dispatcher – Active Scheduler
• Active objects can be used as normal
ActiveScheduler
Qt
Qt for Symbian: bit.ly/qtsymbian
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
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
Thank You!Questions?
Qt for Symbian: bit.ly/qtsymbian
Reference
• Download an SDK from:
– Forum Nokia (http://forum.nokia.com)
– Samsung Mobile Innovator (http://innovator.samsungmobile.com)
– Symbian Foundation (http://developer.symbian.com)
62