Qt Application Development

download Qt Application Development

If you can't read please download the document

Transcript of Qt Application Development

Qt Application Development

Drago Acostchioaie

http://www.unixinside.org

[email protected]

Open Source Camp, Iai, 7 - 8 mai 2016

Drago Acostchioaie - http://www.unixinside.org

Ce este Qt

Qt. Code less. Create more. Deploy everywhere

Faciliteaz dezvoltarea de aplicaii i interfee utilizator independente de platform

Este suportat o larg varietate de platforme desktop, mobile i embedded

Nu este necesar rescrierea codului surs

Este open-source

Open Source Camp, Iai, 7 - 8 mai 2016

Drago Acostchioaie - http://www.unixinside.org

Avantaje de a folosi Qt

un singur cod surs funcioneaz fr modificri pe platforme diferite(write once, run everywhere vezi i paradigma de portare a soluiilor open source)

performane superioare fa de limbajele care ruleaz ntr-o main virtual (ex Java),fiindc codul binar se execut nativ, rezultnd un consum semnificativ mai redus deresurse

utilizeaz sistemul grafic al sistemului de operare pe care ruleaz; astfel, aplicaiile auaspectul i comportamentul nativ al sistemului gazd

trecerea de la un sistem de operare la altul nu necesit modificri ale codului surs, cidoar compilarea acestuia pe fiecare platform n parte (dac nu s-au folositfunctionaliti/biblioteci specifice)

asigur codul surs mpotriva schimbrilor viitoare ale platformelor gazd (la nivelsurs sau binar; dezvoltatorii se pot astfel concentra pe dezvoltarea aplicaiilor, nu pemodificrile API-ului)

pot fi atinse mai uor piee multiple (dedicate diferitelor sisteme de operare), cu costurimai mici de mentenan a codului

Open Source Camp, Iai, 7 - 8 mai 2016

Drago Acostchioaie - http://www.unixinside.org

1994 este lansat prima versiune Qt, de ctre Trolltech (Norvegia)

2000 Qt pentru platforma X11 este lansat sub licen GPL v2

Iunie 2005 Qt versiunea 4 (reprezint un progres considerabil fa de versiunile anterioare)

Iunie 2008 Trolltech este cumprat de Nokia (progres considerabil n dezvoltarea Qt pe platforme mobile)

2011 Digia (Finlanda) cumpr Qt de la Nokia

Decembrie 2012 este lansat Qt 5, avnd model de dezvoltare open source

Septembrie 2014 Qt este transferat catre Qt Company, aparinnd Digia

Open Source Camp, Iai, 7 - 8 mai 2016

Scurt istoric

Drago Acostchioaie - http://www.unixinside.org

Mediul desktop KDE i majoritatea aplicaiilor KDE

Ubuntu Touch

webOS

Skype

VLC media player

Google Earth

Aplicaii din domeniul auto (Tesla Model S)

Numeroase companii: AMD, European Space Agency, Lucasfilm, Walt Disney Animation Studios, Volvo, Siemens, Panasonic, US Army Research Laboratory

Open Source Camp, Iai, 7 - 8 mai 2016

Aplicaii care utilizeaz Qt

Drago Acostchioaie - http://www.unixinside.org

Pe ce platforme ruleaz Qt

Platforme de tip Desktop

Linux/X11, dar i alte UNIX flavours(FreeBSD, Solaris, HP-UX, AIX)

Linux/Wayland

MacOS

Windows

Platforme Mobile

Android

iOS

Windows

Platforme Embedded

Embedded Android

Embedded Linux

Windows Embedded, Windows CE, WinRT

Real-time operating systems (ex QNX, VxWorks)

Open Source Camp, Iai, 7 - 8 mai 2016

Drago Acostchioaie - http://www.unixinside.org

n ce limbaje putem programa folosind Qt

Limbaje native: C++ i QML

QML limbaj declarativ care permite descrierea interfeei utilizator, alctuit dincomponente vizuale i definirea modurilor de interaciune/relaionare dintre acestea

Poate interaciona cu alte limbaje (engl. language bindings): Java (QtJambi), Ruby,C#, C++11

Limbaje de scripting suportate: QML (nativ), JavaScript, Phyton

Open Source Camp, Iai, 7 - 8 mai 2016

Drago Acostchioaie - http://www.unixinside.org

Ce medii integrate sunt compatibile cu Qt

Qt Creator

Eclipse

Microsoft Visual Studio

Open Source Camp, Iai, 7 - 8 mai 2016

http://qt.io

Drago Acostchioaie - http://www.unixinside.org

Ce poate faceQt Creator

Gestiunea proiectului

Editarea codului surs

Controlul versiunilor

Proiectarea interfeei

Help integrat

Generarea codului binar

Depanarea aplicaiei

Publicarea aplicaiei

Open Source Camp, Iai, 7 - 8 mai 2016

Drago Acostchioaie - http://www.unixinside.org

Ce poate face Qt Creator

Vrjitor (wizard) pentru proiecte Qt

realizeaz proiecte noi Qt

genereaz automat proiectul i fiierele de baz

Editor avansat de cod surs C++/QML/Javascript

syntax highlighting

completare automat a codului

marcarea automat a erorilor de sintax n timpul editrii

auto-indentare

posibilitatea de expandare/restrngere a funciilor

cutare incremental a cuvintelor-cheie n timpul editrii

comutarea uoar ntre declaraia i definiia unei metode

posibilitatea de a face semne de carte n cadrul codului surs

posibilitatea de a lucra fr mouse i de a deschide ferestre de editare multiple

Open Source Camp, Iai, 7 - 8 mai 2016

Drago Acostchioaie - http://www.unixinside.org

Proiectarea interfeei utilizator cu Qt Creator

Qt Designer

Utilizat pentru proiectarea interfeei utilizator a aplicaiilor pe platforme desktop

Se bazeaz pe editarea de widget-uri i form-uri

Permite utilizarea mecanismului de semnale i sloturi

Interfaa utilizator este salvat n fiiere XML

Qt Quick Designer

Utilizat pentru proiectarea interfeei utilizator a aplicaiilor pe platforme mobile

Permite dou moduri de lucru, editare i design

Suport machete de interfa multiple (ex telefon / tablet / desktop), fr anecesita modificarea codului surs

Open Source Camp, Iai, 7 - 8 mai 2016

Drago Acostchioaie - http://www.unixinside.org

Ce poate face Qt Creator

Help pentru biblioteca Qt integrat

poate fi accesat n timpul editrii prin poziionarea pe un cuvnt-cheie

Sistem de compilare a proiectului

prin intermediul sistemului qmake (propriu Qt) sau prin Cmake

Sistem de gestiune a fiierelor din proiect

permite localizarea uoar a unui fiier din proiect dup tipul i numele acestuia

Sisteme de control al versiunilor

sunt suportate: Git, Subversion (SVN), CVS i Perforce

Open Source Camp, Iai, 7 - 8 mai 2016

Drago Acostchioaie - http://www.unixinside.org

Ce poate face Qt Creator

Compilarea aplicaieiSunt suportate gcc, gdb, Clang precum i Microsoft Visual Studio compiler

Pot fi stabilite individual configurrile pentru fiecare platform n parte i se poatecomuta rapid ntre platforme

Se pot crea versiuni diferite ale proiectului, pentru a pstra separat codul surs

dependent de platform

Genereaz automat pachetele care vor transferate pe dispozitivul mobil n vederea executrii aplicaiei direct pe acesta

Open Source Camp, Iai, 7 - 8 mai 2016

Drago Acostchioaie - http://www.unixinside.org

Ce poate face Qt Creator

Depanarea aplicaiei

Pot fi stabilite puncte de ntrerupere, rula aplicaia linie-cu-linie sau instruciune-cu-instruciune, examina coninutul variabilelor locale i globale

Permite depanarea inclusiv a funciilor Javascript

Dac aplicaia este testat direct pe dispozitivul mobil sau n emulator, mesajele vor aprea n consola QtCreator

Dac se stabilesc puncte de oprire (breakpoints), n consola QML/Javascript pot fi executate expresii Javascript

n timpul execuiei, poate fi explorat structura obiectelor

Open Source Camp, Iai, 7 - 8 mai 2016

Drago Acostchioaie - http://www.unixinside.org

Ce poate face Qt Creator

Publicarea aplicaieiPermite crearea pachetelor necesare publicrii aplicaiei pentru dispozitive mobile, utiliznd magazinele de aplicaii (App Store, Google Play, Windows Store)

Qt Installer

Arhitectur care ofer un set de instrumente i utilitare pentru realizarea de sisteme de instalare ale aplicaiilor

Funcioneaz pe Linux, MacOS i Windows i are aspectul nativ al platformei gazd

Sistemul de instalare este configurabil, putndu-se aduga noi widget-uri i crea scripturi pentru a realiza operaiuni noi

Sistemul de instalare poate fi offline (conin toate componentele necesare) sau online (coninutul poate fi descrcat de pe un server Web)

Ofer i posibilitatea de actualizare ulterioar a coninutului aplicaiei

http://doc.qt.io/qt-5/publishtogoogleplay.html

Open Source Camp, Iai, 7 - 8 mai 2016

Drago Acostchioaie - http://www.unixinside.org

Qt are o structur modular

http://doc.qt.io/qt-5/qtmodules.html

Qt Essentials

Qt Core - provides core non-GUI functionality

Qt GUI - provides the basic enablers for graphical applications

Qt Multimedia - provides audio, video, radio and camera functionality

Qt Network - provides classes to make network programming easier and portable

Qt QML - classes for QML and JavaScript languages

Qt Quick - provides classes for embedding Qt Quick2 in Qt/C++ applications

Qt SQL - provides a driver layer, SQL API layer, and a user interface layer for SQL db

Qt Test - classes for unit testing Qt applications and libraries

Qt WebKit - provides a web browser engine (WebKit2)

Qt Widgets - extends Qt GUI with C++ widget functionality

Open Source Camp, Iai, 7 - 8 mai 2016

Drago Acostchioaie - http://www.unixinside.org

Qt are o structur modular

http://doc.qt.io/qt-5/qtmodules.html

Qt Add-ons

Qt Bluetooth enables basic Bluetooth operations

Qt D-Bus - Inter-Process Communication using the D-Bus protocol (UNIX-only)

Qt Graphical Effects - graphical effects for use with Qt Quick 2

Qt Image Formats - plugins for additional image formats

Qt Location location services support

Qt NFC provides connectivity between NFC enabled devices

Qt OpenGL - offers classes that make it easy to use OpenGL

Qt Positioning - provides positioning information

Qt Print Support - provides classes to make printing easier and portable

Qt Sensors - Provides classes for reading sensor data

Qt Serial Port - classes that enable access to a serial port

Qt Script - provides classes for making Qt applications scriptable

Qt SVG - provides functionality for handling SVG images

Qt XML - implementations of SAX and DOM

Qt XML Patterns - support for XPath, XQuery, XSLT and XML schema validation

Open Source Camp, Iai, 7 - 8 mai 2016

Drago Acostchioaie - http://www.unixinside.org

Qt are o structur modular

http://doc.qt.io/qt-5/qtmodules.html

Qt Tools

Qt Designer classes for extending Qt Designer

Qt Help - classes for integrating online documentation into applications

Qt UI Tools - classes to handle the forms created in Qt Designe

Open Source Camp, Iai, 7 - 8 mai 2016

Drago Acostchioaie - http://www.unixinside.org

Permite execuia de aplicaii Qt5 pe dispozitive care ruleaz Android v2.3.3 sau mai nou

Sunt suportate toate modulele Qt, exceptnd Qt WebKit, Qt NFC, Qt SerialPort i cele specifice unor platforme (Qt MacExtras, Qt WindowsExtras, Qt X11Extras)

Ce este Qt pentru Android

http://doc.qt.io/qt-5/android-support.html

Open Source Camp, Iai, 7 - 8 mai 2016

Drago Acostchioaie - http://www.unixinside.org

Android SDK Tools (instrumente pentru dezvoltarea i depanarea de aplicaii Android)

Android NDK (permite dezvoltarea de cod pentru Android in C/C++)

Apache Ant v1.8 sau mai nou (instrumente pentru generarea de aplicaii Android)

Java SE Development Kit (JDK) v6 sau mai nou. Pe Linux putem utiliza i OpenJDK

pe Windows, este necesar i Android Debug Bridge (ADB) driver

Ce ne trebuie pentru platforma Android

http://doc.qt.io/qt-5/androidgs.html

Open Source Camp, Iai, 7 - 8 mai 2016

Drago Acostchioaie - http://www.unixinside.org

Executare direct pe dispozitiv. Consola de mesaje se va regsi n QtCreator. nainte de conectarea prin USB a dispozitivului, trebuie activat USB Debugging pe acesta

Executare pe calculator. Poate fi aleas platforma pe care se compileaz/execut proiectul.

Executare n emulator Android. n prealabil trebuie creat un AVD (Android Virtual Device) i stabilite proprietile dispozitivului virtual.

Cum executm aplicaia Android

doc.qt.io/qtcreator/creator-developing-android.html

Open Source Camp, Iai, 7 - 8 mai 2016

Drago Acostchioaie - http://www.unixinside.org

Permite execuia de aplicaii Qt5 pe dispozitive care ruleaz iOS

Cerine minime: iPhone 3GS, iPod touch 3rd gen, iPad2, iPad mini

Este necesar Xcode (Windows sau MacOS)

n codul surs pot fi utilizate C++ i Objective-C (compilator Clang)

Ce este Qt pentru iOS

http://doc.qt.io/qt-5/ios-support.html

Open Source Camp, Iai, 7 - 8 mai 2016

Drago Acostchioaie - http://www.unixinside.org

#include #include #include #include "background.h"

int main(int argc, char *argv[]){ QApplication app(argc, argv);

QQmlApplicationEngine engine; // ncrcare component vizual engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

Background backgrd; // expunere C++ la QML engine.rootContext()->setContextProperty("app", &backgrd);

return app.exec();}

Exemplu de aplicaie pentru dispozitiv mobil

Open Source Camp, Iai, 7 - 8 mai 2016

Drago Acostchioaie - http://www.unixinside.org

#ifndef BACKGROUND#define BACKGROUND

#include

class Background : public QObject{ Q_OBJECTpublic: inline Background(QObject *parent = 0) : QObject(parent) { } // apelabil din QML Q_INVOKABLE inline bool autentificare(const QString &nume, const QString &parola) { return (nume == "admin" && parola == "admin"); }};

#endif // BACKGROUND

Open Source Camp, Iai, 7 - 8 mai 2016

Exemplu de aplicaie pentru dispozitiv mobil

Drago Acostchioaie - http://www.unixinside.org

import QtQuick 2.4import QtQuick.Controls 1.3import QtQuick.Window 2.2import QtQuick.Dialogs 1.2import QtQuick.Layouts 1.1

ApplicationWindow { title: "Autentificare" width: 640 height: 480 visible: true

MessageDialog { id: dialog title: "Mesaj" icon: StandardIcon.Question // proprietate ataat (binding) - se actualizeaz la schimbarea valorii text: "Rezultat autentificare: " + rez standardButtons: StandardButton.Ok property string rez }

Open Source Camp, Iai, 7 - 8 mai 2016

Exemplu de aplicaie pentru dispozitiv mobil

Drago Acostchioaie - http://www.unixinside.org

function afisareRezultat(stare) { dialog.rez = stare dialog.open() }

GridLayout { anchors.centerIn: parent columns: 2 rows: 4 Text { text: "Autentificare" Layout.columnSpan: 2 Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter }

Open Source Camp, Iai, 7 - 8 mai 2016

Exemplu de aplicaie pentru dispozitiv mobil

Drago Acostchioaie - http://www.unixinside.org

Text { text: "Nume:" } TextField { id: numeEdit } Text { text: "Parola:" } TextField { id: parolaEdit; echoMode: TextInput.Password } Item { Layout.fillWidth: true } Button { text: "OK" Layout.alignment: Qt.AlignRight | Qt.AlignVCenter onClicked: { var result = app.autentificare(numeEdit.text, parolaEdit.text) afisareRezultat(result ? "Succes" : "Esuata") } } }}

Open Source Camp, Iai, 7 - 8 mai 2016

Exemplu de aplicaie pentru dispozitiv mobil

Drago Acostchioaie - http://www.unixinside.org

Resurse

Qt documentation http://doc.qt.io

Mark Summerfield books - http://www.qtrac.eu/marksummerfield.html

Learning Qt videos - https://www.ics.com/learning/icsnetwork

Open Source Camp, Iai, 7 - 8 mai 2016