Presentation is loading. Please wait.

Presentation is loading. Please wait.

LAMAD Symbian Qt 17.3.2013. Symbian OS One of the first modern mobile operating systems Most popular smartphone OS until the end of 2010 Main Nokia OS.

Similar presentations


Presentation on theme: "LAMAD Symbian Qt 17.3.2013. Symbian OS One of the first modern mobile operating systems Most popular smartphone OS until the end of 2010 Main Nokia OS."— Presentation transcript:

1 LAMAD Symbian Qt 17.3.2013

2 Symbian OS

3 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

4 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

5 S60 3 rd edition For keypad-only devices Nokia E72Nokia C5 Nokia N95Nokia E52

6 S60 5 th edition Touch and touch&type devices Nokia N97Nokia C5-03 Nokia E5 Nokia 5800

7 Symbian^3 For touchscreen devices Multiple home screens Better hardware Nokia C7Nokia E7Nokia N8Nokia 808

8 Market share 2012 Smartphones4Q ’114Q ’124Q4Q ’114Q ’12 (mil. phones)Sales GrowthShare Android77.1144.788%51%70% iOS35.543.523%24%21% Blackberry13.27.3(44)%9%4% Microsoft2.86.2124%2%3% Bada3.12.7(14)%2%1% Symbian17.52.6(85)%12%1% Others1.20.7(39)%1%0% Total150.2207.738%100%

9 Developing for Symbian 3 options available

10 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

11 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

12 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

13 Qt – Introduction

14 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 development framework written in C++.”

15 Desktop target platforms Windows Mac OS X Linux/Unix X11

16 Mobile target platforms Windows CE Symbian Maemo/MeeGo Embedded Linux

17 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 QtSvg QtSqlQtScript QtOpenVG QtOpenGL QtNetwork QtMultimedia QtGui QtMobility

18 What is Qt? Qt extends C++ with macros and introspection All Qt object inherit QObject base class All code is still plain C++ // foreach macro foreach (int value, intList) { … } // QObject is the base class of Qt QObject *o = new QPushButton; o->metaObject()->className(); // returns ”QPushButton” // Event handling with signal and solts connect(button, SIGNAL(clicked()), window, SLOT(close()));

19 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

20 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

21 Hello World #include int main( int argc, char **argv ) { QApplication app( argc, argv ); QLabel l( "Hello World!" ); l.show(); return app.exec(); } Windows LinuxMac Symbian

22 Qt – QObject

23 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

24 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

25 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 )

26 How meta data is generated? class LocationHandler : public QObject { Q_OBJECT Q_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 info about the class The Q_OBJECT macro, usually first QObject must be inherited first (could be indirect)

27 Getter, const, returns value, takes no arguments class LocationHandler : public QObject { Q_OBJECT Q_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, setColor For booleans: isEnabled, setEnabled QObject properties Setter, returns void, takes value as only argument Macro with property declaration Private state

28 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/...

29 Memory Management QObject can have parent and children When 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 option1option2 parent deletes box and button box deletes option1 and option2

30 Qt – Signals and slots

31 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 solts connect(button, SIGNAL(clicked()), window, SLOT(close()));

32 Signals and Slots in Action emit clicked();

33 Signals and Slots in Action connect(trackingButton,SIGNAL(cli cked()), this, SLOT(showTrackingScreen()));24 private slots: void showTrackingScreen();

34 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

35 Qt – User interface

36 Qt Widgets User interfaces are built from individual widgets 46 widgets in Designer 59+ direct descendants from QWidget QLabel QPushButton QLineEdit QDoubleSpinBox QScrollBar

37 Qt Quick Qt Quick is the alternative to Qt Widgets Qt 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 Creator Qt Quick supported ONLY in Symbian^3 and desktop

38 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

39 Cross Platform Styles Widgets are drawn using a platform specific style to ensure a native look

40 Using Designer drag-and-drop

41 Using the Code #ifndef MOPSIMAINSCREEN_H #define MOPSIMAINSCREEN_H #include namespace Ui { class MopsiMainScreen; } class MopsMainScreen: public QWidget { Q_OBJECT public: MopsiMainScreen(QWidget *parent=0); ~MopsiMainScreen (); private: Ui::MopsiMainScreen *ui; }; #endif // MOPSIMAINSCREEN_H Forward declaration of the Ui::MopsiMainScreen class A Ui::Widget pointer, ui, refers to all widgets Basically a standard QWidget derived class

42 #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 the Ui::MopsiMainScreen class as ui Deletes the ui object Calls setupUi, creating all the widgets as children to the given parent (this).

43 Style sheets For 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

44 Style sheets The easiest way to apply a style sheet to an individual widget is to use Designer

45 Qt – Internet

46 Accessing internet QtWebKit 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*)));

47 Classes for Network Access QNetworkReplyQNetworkRequest QAbstractNetworkCache QNetworkCookieJarQNetworkProxyFactory QNetworkAccessManager

48 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(); }

49 Qt – Location

50 Location 27

51 Location Example // create positioning source source = QGeoPositionInfoSource::createDefaultSource(this); // Set to listen just to GPS source->setPreferredPositioningMethods (QGeoPositionInfoSource::SatellitePositioningMethods); source->setUpdateInterval(1000); // Update interval is 1s // Connect source signal to a method that handles the update connect(source, SIGNAL(positionUpdated(QGeoPositionInfo)), MapWindow::instance(), SLOT(positionUpdated(QGeoPositionInfo)));... void MapWindow::positionUpdated(const QGeoPositionInfo& info){ // handle here the position change


Download ppt "LAMAD Symbian Qt 17.3.2013. Symbian OS One of the first modern mobile operating systems Most popular smartphone OS until the end of 2010 Main Nokia OS."

Similar presentations


Ads by Google