Mobile Development with Qt for Symbian

Preview:

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/elearning

Citation preview

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

Recommended