mobile development with qt for symbian
DESCRIPTION
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/elearningTRANSCRIPT
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