lamad symbian qt 17.3.2013. symbian os one of the first modern mobile operating systems most popular...

Post on 24-Dec-2015

217 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

LAMADSymbian Qt17.3.2013

Symbian OS

Symbian OS

One of the first modern mobile operating systems

Most popular smartphone OS until the end of 2010

Main Nokia OS until 2011

Maintained by Accenture

Nokia 808 PureView is the last ever Symbian smartphone

Symbian OS

+ True multi-tasking operating system

+ Wide range of available phones (from cheap keypad-based to large touchscreen smartphones)

+ Still has a big user base, especially in developing countries

- More suited for non-touch keypad devices

- Slow and outdated

- Declining user base

Initial partners of Symbian OS

S60 3rd edition

For keypad-only devices

Nokia E72Nokia C5 Nokia N95 Nokia E52

S60 5th edition

Touch and touch&type devices

Nokia N97 Nokia C5-03 Nokia E5 Nokia 5800

Symbian^3For touchscreen devices

Multiple home screens

Better hardware

Nokia C7 Nokia E7 Nokia N8 Nokia 808

Market share 2012

Smartphones 4Q ’11 4Q ’12 4Q 4Q ’11 4Q ’12(mil. phones) Sales Sales Growth Share Share

Android 77.1 144.7 88% 51% 70%iOS 35.5 43.5 23% 24% 21%

Blackberry 13.2 7.3 (44)% 9% 4%Microsoft 2.8 6.2 124% 2% 3%

Bada 3.1 2.7 (14)% 2% 1%Symbian 17.5 2.6 (85)% 12% 1%Others 1.2 0.7 (39)% 1% 0%

Total 150.2 207.7 38% 100% 100%

Developing for Symbian

3 options available

Java ME

+ Easy memory management

+ Easy to develop

+ Application can be ported to S40 Asha (Nokia’s feature-phone OS)

- Lack of APIs(maps, navigation, UI controls)

- Limited access to hardware

- Needs certification and signing

- Limited subset of Java

Symbian C++

Subset of C++

+ Full access to hardware

+ Low memory footprint

+ Good profiling and debugging tools

- Lack of APIs (maps, navigation, UI controls)

- Steep learning curve

- Difficult memory management

- Needs certification and signing

Qt Framework+ Good set of UI controls

+ Good customization options

+ Fast to develop

+ Application can be deployed for MeeGo with minor changes

- Large memory footprint on older Symbian versions

- Lack of Symbian emulator (although Qt Simulator can simulate Qt on Symbian)

- The Mobility package can have some bugs

Qt – Introduction

What is Qt?

C++ framework – bindings for other languages Python, Ruby, C#, etc.

Originally for user interfaces – now for:Databases, XML, WebKit, multimedia, networking, OpenGL, scripting, location, telephony, non-GUI...

“Qt is a cross platform developmentframework written in C++.”

Desktop target platforms

Windows

Mac OS X

Linux/Unix X11

Mobile target platforms

Windows CE

Symbian

Maemo/MeeGo

Embedded Linux

What is Qt?Qt is made up of modules

All modules have a common scheme and are built from the same API design ideas

QtCore

Phonon

QtXmlPatterns

QtXmlQtWebKit

QtSvgQtSql QtScript

QtOpenVG

QtOpenGLQtNetwork

QtMultimedia

QtGui

QtMobility

What is Qt?

Qt extends C++ with macros and introspection

All Qt object inherit QObject base class

All code is still plain C++

// foreach macroforeach (int value, intList) { … }

// QObject is the base class of QtQObject *o = new QPushButton;o->metaObject()->className(); // returns ”QPushButton”

// Event handling with signal and soltsconnect(button, SIGNAL(clicked()), window, SLOT(close()));

Getting Qt

Easiest way to get started is to download Qt SDK. It contains: Qt headers and documentation Pre-built Qt libraries and tools The QtCreator integrated development

environment

Windows Installation

1.Download the Qt SDK for Windows

2.Run the downloaded installer

3.Click through the installer

4.Start QtCreator from the start menu

Hello World

#include <QApplication>#include <Qlabel>int main( int argc, char **argv ) {

QApplication app( argc, argv );

QLabel l( "Hello World!" );

l.show(); return app.exec();

}

Windows Linux Mac

Symbian

Qt – QObject

The QObject

QObject is the base class of almost all Qt classes and all widgets

It contains many of the mechanisms of Qt: events signals and slots properties memory management

The QObject

QObject is the base class to most Qt classes.

Examples of exceptions are: Classes that need to be lightweight such as graphical

primitives Data containers (QString, QList, QChar, etc) Classes that needs to be copyable, as QObjects cannot

be copied

Meta data

Qt implements introspection in C++

Every QObject has a meta object

The meta object knows about: class name (QObject::className) inheritance (QObject::inherits) properties signals and slots general information (QObject::classInfo)

How meta data is generated?

class LocationHandler : public QObject {Q_OBJECTQ_CLASSINFO("author", "Mopsi")Q_PROPERTY(QGeoPositionInfo location READ location WRITE

setInitialLocation)

public: LocationHandler(const int &desiredAccuracy, QObject *parent=0);QGeoPositionInfo location() const;

public slots:void setInitialLocation( const QGeoPositionInfo &aLocation );

signals:void locationChanged(QGeoPositionInfo );

private: QGeoPositionInfo m_location;

};

Meta data

Qt keywords

General infoabout the

class

The Q_OBJECT

macro, usually first

QObject must be inherited first (could be indirect)

Getter, const, returns value,takes no arguments

class LocationHandler : public QObject {Q_OBJECTQ_CLASSINFO("author", "Mopsi")Q_PROPERTY(QGeoPositionInfo location READ location WRITE

setInitialLocation)

public: LocationHandler(const int &desiredAccuracy, QObject *parent=0);QGeoPositionInfo location() const;

public slots:void setInitialLocation( const QGeoPositionInfo &aLocation );

signals:void locationChanged(QGeoPositionInfo );

private: QGeoPositionInfo m_location;

};

QObject has properties with getter and setter methods

Naming policy: color, setColorFor booleans: isEnabled, setEnabled

QObject properties

Setter, returns void,

takes value as only argument

Macro with property

declaration

Private state

Direct access

Through the meta info and property system

Discover properties at run-time

Using properties

QString text = label->text();label->setText("Hello World!");

QString text = object->property("text").toString(); object->setProperty("text", "Hello World");

int QMetaObject::propertyCount(); QMetaProperty QMetaObject::property(i); QMetaProperty::name/isConstant/isDesignable/read/write/...

Memory Management

QObject can have parent and childrenWhen a parent object is deleted, it deletes its children

This is used when implementing visual hierarchies.

QDialog *parent = new QDialog();QGroupBox *box = new QGroupBox(parent);QPushButton *button = new QPushButton(parent);QRadioButton *option1 = new QRadioButton(box);QRadioButton *option2 = new QRadioButton(box);

delete parent;parent

box button

option1 option2

parent deletes box and buttonbox deletes option1 and option2

Qt – Signals and slots

Signals and Slots

Is the default event handling mechanism in Qt

Dynamically and loosely ties together events and state changes with reactions

It’s what makes Qt tick

// Event handling with signal and soltsconnect(button, SIGNAL(clicked()), window, SLOT(close()));

Signals and Slots in Action

emit clicked();

Signals and Slots in Actionconnect(trackingButton,SIGNAL(clicked()), this, SLOT(showTrackingScreen()));24

private slots: void showTrackingScreen();

Signals and Slots vs Callbacks

A callback is a pointer to a function that is called when an event occurs, any function can be assigned to a callback

– No type-safety– Always works as a direct call

Signals and Slots are more dynamic– A more generic mechanism– Easier to interconnect two existing classes– Less knowledge shared between involved classes

Qt – User interface

Qt Widgets

User interfaces are built from individual widgets

46 widgets in Designer

59+ direct descendants from QWidget

QLabel

QPushButtonQLineEdit

QDoubleSpinBox

QScrollBar

Qt QuickQt Quick is the alternative to Qt WidgetsQt Quick consists of

QML – the language (similar to JavaScript) Designed for building device user interfaces Can be used in other application too

Qt Declarative – the Qt module Contains the QML engine, context and view Qt bindings for QML Mechanisms for integrating C++ and QML

There is tooling support in Qt CreatorQt Quick supported ONLY in Symbian^3 and desktop

Traits of a Widget

Occupies a rectangular area of the screen

Receives events from input devices

Emits signals for “notable” changes

Are structured in a hierarchy

Can contain other widgets

Cross Platform Styles

Widgets are drawn using a platform specific style to ensure a native look

Using Designer

drag-and-drop

Using the Code

#ifndef MOPSIMAINSCREEN_H#define MOPSIMAINSCREEN_H

#include <QWidget>

namespace Ui { class MopsiMainScreen;}

class MopsMainScreen: public QWidget { Q_OBJECTpublic: MopsiMainScreen(QWidget *parent=0); ~MopsiMainScreen ();

private: Ui::MopsiMainScreen *ui;};

#endif // MOPSIMAINSCREEN_H

Forward declaration of theUi::MopsiMainScreen

class

A Ui::Widget pointer,ui, refers to all widgets

Basically a standard QWidget derived class

#include “mopsimainscreen.h"#include "ui_widget.h"

MopsiMainScreen::MopsiMainScreen(QWidget *parent) : QWidget(parent), ui(new Ui:: MopsiMainScreen){ ui->setupUi(this);}

MopsiMainScreen::~MopsiMainScreen(){ delete ui;}

Using the Code

Instanciates theUi::MopsiMainScreen class as ui

Deletes the uiobject

Calls setupUi, creating all the

widgets as children to the given parent

(this).

Style sheetsFor highlighting and cross platform styling, all QWidget classes have a styleSheet property

To style an entire application: QApplication::setStyleSheet

Style sheets are inspired from CSS

QToolButton { background-color: blue; color: white; text-align: center; font-size: 14pt; }

No stylesheet

Style sheetsThe easiest way to apply a style sheet to an individual widget is to use Designer

Qt – Internet

Accessing internetQtWebKit classes uses the QNetworkAccessManager

Provides access to web: Independent of UI Handle requests and replies Cache web pages Keep track of cookies Use proxies Act as a protocol translator

networkAccessManager = new QNetworkAccessManager(this);connect(networkAccessManager,

SIGNAL(finished(QNetworkReply*)), this, SLOT(parseResponse(QNetworkReply*)));

Classes for Network Access

QNetworkReplyQNetworkRequest

QAbstractNetworkCache QNetworkCookieJarQNetworkProxyFactory

QNetworkAccessManager

Accessing HTTP programatically

Example – download a file via HTTP using QNetworkAccessManager

QNetworkAccessManager *manager = new QNetworkAccessManager(this); connect(manager, SIGNAL(finished(QNetworkReply*)), this,

SLOT(downloadDone(QNetworkReply*))); manager->get(QNetworkRequest(QUrl("http://cs.uef.fi/mopsi/photos/user.png")));

InternetUtil::downloadDone(QNetworkReply *reply) {QImageReader reader(reply, "png");mImage = reader.read()); emit iconDownloaded(mImage);reply->deleteLater();

}

Qt – Location

Location

27

Location Example// create positioning sourcesource = QGeoPositionInfoSource::createDefaultSource(this);

// Set to listen just to GPSsource->setPreferredPositioningMethods (QGeoPositionInfoSource::SatellitePositioningMethods);

source->setUpdateInterval(1000); // Update interval is 1s

// Connect source signal to a method that handles the updateconnect(source, SIGNAL(positionUpdated(QGeoPositionInfo)), MapWindow::instance(), SLOT(positionUpdated(QGeoPositionInfo)));

...void MapWindow::positionUpdated(const QGeoPositionInfo& info){

// handle here the position change

top related