SlideShare una empresa de Scribd logo
1 de 24
Descargar para leer sin conexión
Realizarea de aplicații pentru
Android
utilizând Qt
Dragoş Acostăchioaie
http://www.unixinside.org
dragos@unixinside.org
Şcoala de vară “Informatică la castel”, Macea, 24 - 30 august 2015
Dragoş Acostăchioaie - http://www.unixinside.org
Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015
Ce este Qt
Qt. Code less. Create more. Deploy everywhere
✗ Facilitează dezvoltarea de aplicații și interfețe utilizator independente de platformă
✗ Este suportată o largă varietate de platforme desktop, mobile și embedded
✗ Nu este necesară rescrierea codului sursă
✗ Este open-source
Dragoş Acostăchioaie - http://www.unixinside.org
Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015
Avantaje de a folosi Qt
✗ un singur cod sursă funcţionează fără modificări pe platforme diferite
(write once, run everywhere – vezi şi paradigma de portare a soluţiilor FOSS)
✗ performanţe superioare faţă de limbajele care rulează într-o maşină virtuală (ex Java),
fiindcă codul binar se execută nativ, rezultând un consum semnificativ mai redus de
resurse
✗ utilizează sistemul grafic al sistemului de operare pe care rulează; astfel, aplicaţiile au
aspectul şi comportamentul nativ al sistemului gazdă
✗ trecerea de la un sistem de operare la altul nu necesită modificări ale codului sursă, ci
doar compilarea acestuia pe fiecare platformă în parte (dacă nu s-au folosit
functionalităţi/biblioteci specifice)
✗ asigură codul sursă împotriva schimbărilor viitoare ale platformelor gazdă (la nivel
sursă sau binar; dezvoltatorii se pot astfel concentra pe dezvoltarea aplicaţiilor, nu pe
modificările API-ului)
✗ pot fi atinse mai uşor pieţe multiple (dedicate diferitelor sisteme de operare), cu costuri
mai mici de mentenanță a codului
Dragoş Acostăchioaie - http://www.unixinside.org
Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015
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
✗ BlackBerry
Platforme Embedded
✗ Embedded Android
✗ Embedded Linux
✗ Windows Embedded, Windows CE, WinRT
✗ Real-time operating systems (ex QNX, VxWorks)
Dragoş Acostăchioaie - http://www.unixinside.org
Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015
În ce limbaje putem programa folosind Qt
✗ Limbaje native: C++ și QML
✗ Poate interacționa cu alte limbaje (engl. language bindings): Java (QtJambi), Ruby,
C#, C++11
✗ Limbaje de scripting suportate: QML (nativ), JavaScript, Phyton
Dragoş Acostăchioaie - http://www.unixinside.org
Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015
Ce medii integrate sunt compatibile cu Qt
✗ Qt Creator
✗ Eclipse
✗ Microsoft Visual Studio
Dragoş Acostăchioaie - http://www.unixinside.org
Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015
Ce poate face
Qt Creator
✗ Gestiunea proiectului
✗ Editarea codului sursă
✗ Controlul versiunilor
✗ Proiectarea interfeței
✗ Help integrat
✗ Generarea codului binar
✗ Depanarea aplicaţiei
✗ Publicarea aplicației
Dragoş Acostăchioaie - http://www.unixinside.org
Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015
Ce poate face Qt Creator
Vrăjitor (wizard) pentru proiecte Qt
✗ realizează proiecte noi Qt
✗ generează automat proiectul şi fişierele de bază
Editor avansat de cod sursă C++/QML/Javascript
✗ syntax highlighting
✗ completare automată a codului
✗ marcarea automată a erorilor de sintaxă în timpul editării
✗ auto-indentare
✗ posibilitatea de expandare/restrângere a funcţiilor
✗ căutare incrementală a cuvintelor-cheie în timpul editării
✗ comutarea uşoară între declaraţia şi definiţia unei metode
✗ posibilitatea de a face semne de carte în cadrul codului sursă
✗ posibilitatea de a lucra fără mouse şi de a deschide ferestre de editare multiple
Dragoş Acostăchioaie - http://www.unixinside.org
Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015
Proiectarea interfeței utilizator cu Qt Creator
Qt Designer
✗ Utilizat pentru proiectarea interfeței utilizator a aplicațiilor pe platforme desktop
✗ Se bazează pe editarea de widget-uri și form-uri
✗ Permite utilizarea mecanismului de semnale și sloturi
✗ Interfața utilizator este salvată în fișiere XML
Qt Quick Designer
✗ Utilizat pentru proiectarea interfeței utilizator a aplicațiilor pe platforme mobile
✗ Permite două moduri de lucru, editare și design
Dragoş Acostăchioaie - http://www.unixinside.org
Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015
Ce poate face Qt Creator
Help pentru biblioteca Qt integrat
✗ poate fi accesat în timpul editării prin poziţionarea pe un cuvânt-cheie
Sistem de compilare a proiectului
✗ prin intermediul sistemului qmake (propriu Qt) sau prin Cmake
Sistem de gestiune a fişierelor din proiect
✗ permite localizarea uşoară a unui fişier din proiect după tipul şi numele acestuia
Sisteme de control al versiunilor
✗ sunt suportate: Git, Subversion (SVN), CVS şi Perforce
Dragoş Acostăchioaie - http://www.unixinside.org
Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015
Ce poate face Qt Creator
Compilarea aplicației
✗ Sunt suportate gcc şi gdb, precum și Microsoft Visual Studio compiler
✗ Pot fi stabilite individual configurările pentru fiecare platformă în parte și se poate
comuta rapid între platforme
✗ Se pot crea versiuni diferite ale proiectului, pentru a păstra separat codul sursă
dependent de platformă
✗ Generează automat pachetele care vor transferate pe dispozitivul mobil în vederea
executării aplicației direct pe acesta
Dragoş Acostăchioaie - http://www.unixinside.org
Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015
Ce poate face Qt Creator
Depanarea aplicației
✗ pot fi stabilite puncte de întrerupere, rula aplicaţia linie-cu-linie sau instrucţiune-cu-
instrucţiune, examina conţinutul variabilelor locale şi globale
✗ Permite depanarea inclusiv a funcțiilor Javascript
✗ Dacă aplicația este testată direct pe dispozitivul mobil sau în emulator, mesajele
vor apărea în consola QtCreator
✗ Dacă se stabilesc puncte de oprire (breakpoints), în consola QML/Javascript pot fi
executate expresii Javascript
✗ În timpul execuției, poate fi explorată structura obiectelor
Dragoş Acostăchioaie - http://www.unixinside.org
Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015
Ce poate face Qt Creator
Publicarea aplicației
✗ Permite crearea pachetelor necesare publicării aplicației pentru dispozitive mobile,
utilizând magazinele de aplicații (Apple Store, Google Play)
Qt Installer
✗ arhitectură care oferă un set de instrumente şi utilitare pentru realizarea de sisteme
de instalare ale aplicaţiilor
✗ funcţionează pe Linux, MacOS şi Windows şi au aspectul nativ al platformei utilizate
✗ sistemul de instalare este configurabil, putându-se adăuga noi widget-uri şi crea
scripturi pentru a realiza operaţiuni noi
✗ sistemul de instalare poate fi offline (conţin toate componentele necesare) sau online
(conţinutul poate fi descărcat de pe un server Web)
✗ oferă şi posibilitatea de actualizare ulterioară a conţinutului aplicaţiei
http://doc.qt.io/qt-5/publishtogoogleplay.html
Dragoş Acostăchioaie - http://www.unixinside.org
Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015
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
Dragoş Acostăchioaie - http://www.unixinside.org
Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015
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 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 Script Tools
✗ 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
Dragoş Acostăchioaie - http://www.unixinside.org
✗ Permite execuția de aplicații Qt5 pe dispozitive care rulează Android v2.3.3 sau mai nouă
✗ Sunt suportate toate modulele Qt, exceptând Qt WebKit, Qt NFC, Qt SerialPort și cele
specifice unor platforme (Qt MacExtras, Qt WindowsExtras, Qt X11Extras)
Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015
Ce este Qt pentru Android
http://doc.qt.io/qt-5/android-support.html
Dragoş Acostăchioaie - http://www.unixinside.org
✗ Android SDK Tools (instrumente pentru dezvoltarea și depanarea de aplicații Android)
✗ Android NDK (permite dezvoltarea de cod pentru Android in C/C++)
✗ Apache Ant v1.8 sau mai nouă (instrumente pentru generarea de aplicații 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
Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015
Ce ne trebuie
http://doc.qt.io/qt-5/androidgs.html
Dragoş Acostăchioaie - http://www.unixinside.org
✗ Executare direct pe dispozitiv. Consola de mesaje se va regăsi î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 proprietățile dispozitivului virtual.
Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015
Cum executăm aplicația Android
doc.qt.io/qtcreator/creator-developing-android.html
Dragoş Acostăchioaie - http://www.unixinside.org
#include <QApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include "background.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQmlApplicationEngine engine;
// încărcare componentă vizuală
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
Background backgrd;
// expunere C++ la QML
engine.rootContext()->setContextProperty("app", &backgrd);
return app.exec();
}
Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015
Exemplu de aplicație Android
Dragoş Acostăchioaie - http://www.unixinside.org
#ifndef BACKGROUND
#define BACKGROUND
#include <QObject>
class Background : public QObject
{
Q_OBJECT
public:
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
Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015
Exemplu de aplicație Android
Dragoş Acostăchioaie - http://www.unixinside.org
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.2
import QtQuick.Dialogs 1.2
import QtQuick.Layouts 1.1
ApplicationWindow {
title: "Autentificare"
width: 640
height: 480
visible: true
MessageDialog {
id: dialog
title: "Mesaj"
icon: StandardIcon.Question
// proprietate atașată (binding) - se actualizează la schimbarea valorii
text: "Rezultat autentificare: " + rez
standardButtons: StandardButton.Ok
property string rez
}
Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015
Exemplu de aplicație Android
Dragoş Acostăchioaie - 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
}
Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015
Exemplu de aplicație Android
Dragoş Acostăchioaie - 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")
}
}
}
}
Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015
Exemplu de aplicație Android
Dragoş Acostăchioaie - http://www.unixinside.org
Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015
Resurse
✗ Qt documentation - http://qt-project.org/doc/
✗ Mark Summerfield books - http://www.qtrac.eu/marksummerfield.html
✗ Learning Qt videos - https://www.ics.com/learning/icsnetwork

Más contenido relacionado

Similar a Realizarea de aplicatii pentru Android utilizand Qt

Lupu Vitaliy Bachelor thesis Presentation
Lupu Vitaliy Bachelor thesis PresentationLupu Vitaliy Bachelor thesis Presentation
Lupu Vitaliy Bachelor thesis Presentationlogan123
 
Referat_Java_Creanga_An_II_INFO.pdf
Referat_Java_Creanga_An_II_INFO.pdfReferat_Java_Creanga_An_II_INFO.pdf
Referat_Java_Creanga_An_II_INFO.pdfCreangaMadalina1
 
Prezentare proiect GiSHEO - Marian Neagu
Prezentare proiect GiSHEO - Marian NeaguPrezentare proiect GiSHEO - Marian Neagu
Prezentare proiect GiSHEO - Marian Neaguvasile33
 
Limbajul java
Limbajul javaLimbajul java
Limbajul javaCromina
 
Cosmin Tataru - Ce e nou in Windows 8.1 pentru ITPros
Cosmin Tataru - Ce e nou in Windows 8.1 pentru ITProsCosmin Tataru - Ce e nou in Windows 8.1 pentru ITPros
Cosmin Tataru - Ce e nou in Windows 8.1 pentru ITProsITSpark Community
 
Pipelined Logo Recognition System
Pipelined Logo Recognition SystemPipelined Logo Recognition System
Pipelined Logo Recognition SystemFlavius Anton
 
catana-Wordpress application deployment
catana-Wordpress application deploymentcatana-Wordpress application deployment
catana-Wordpress application deploymentIonut Catana
 
Gestionarea centralizată a logurilor în mediul cloud
Gestionarea centralizată a logurilor în mediul cloudGestionarea centralizată a logurilor în mediul cloud
Gestionarea centralizată a logurilor în mediul cloudIonut Hulub
 
CLIW 2017-2018 (2/12) Arhitectura navigatorului Web
CLIW 2017-2018 (2/12) Arhitectura navigatorului WebCLIW 2017-2018 (2/12) Arhitectura navigatorului Web
CLIW 2017-2018 (2/12) Arhitectura navigatorului WebSabin Buraga
 
Interactiunea cu Utilizatorul în Python, Java.pptx
Interactiunea cu Utilizatorul în Python, Java.pptxInteractiunea cu Utilizatorul în Python, Java.pptx
Interactiunea cu Utilizatorul în Python, Java.pptxrefewe9176
 

Similar a Realizarea de aplicatii pentru Android utilizand Qt (20)

Qt detaliu
Qt detaliuQt detaliu
Qt detaliu
 
Linux ca platforma pentru dezvoltare
Linux ca platforma pentru dezvoltareLinux ca platforma pentru dezvoltare
Linux ca platforma pentru dezvoltare
 
Lupu Vitaliy Bachelor thesis Presentation
Lupu Vitaliy Bachelor thesis PresentationLupu Vitaliy Bachelor thesis Presentation
Lupu Vitaliy Bachelor thesis Presentation
 
Referat_Java_Creanga_An_II_INFO.pdf
Referat_Java_Creanga_An_II_INFO.pdfReferat_Java_Creanga_An_II_INFO.pdf
Referat_Java_Creanga_An_II_INFO.pdf
 
Prezentare proiect GiSHEO - Marian Neagu
Prezentare proiect GiSHEO - Marian NeaguPrezentare proiect GiSHEO - Marian Neagu
Prezentare proiect GiSHEO - Marian Neagu
 
Microsoft zitec
Microsoft  zitecMicrosoft  zitec
Microsoft zitec
 
Limbajul java
Limbajul javaLimbajul java
Limbajul java
 
Cosmin Tataru - Ce e nou in Windows 8.1 pentru ITPros
Cosmin Tataru - Ce e nou in Windows 8.1 pentru ITProsCosmin Tataru - Ce e nou in Windows 8.1 pentru ITPros
Cosmin Tataru - Ce e nou in Windows 8.1 pentru ITPros
 
Pipelined Logo Recognition System
Pipelined Logo Recognition SystemPipelined Logo Recognition System
Pipelined Logo Recognition System
 
Irina Cureraru
Irina CureraruIrina Cureraru
Irina Cureraru
 
CLOUD COMPUTING
CLOUD COMPUTINGCLOUD COMPUTING
CLOUD COMPUTING
 
catana-Wordpress application deployment
catana-Wordpress application deploymentcatana-Wordpress application deployment
catana-Wordpress application deployment
 
Cap.1
Cap.1Cap.1
Cap.1
 
Gestionarea centralizată a logurilor în mediul cloud
Gestionarea centralizată a logurilor în mediul cloudGestionarea centralizată a logurilor în mediul cloud
Gestionarea centralizată a logurilor în mediul cloud
 
Raytracing Distribuit
Raytracing DistribuitRaytracing Distribuit
Raytracing Distribuit
 
HTML5? HTML5!
HTML5? HTML5!HTML5? HTML5!
HTML5? HTML5!
 
CLIW 2017-2018 (2/12) Arhitectura navigatorului Web
CLIW 2017-2018 (2/12) Arhitectura navigatorului WebCLIW 2017-2018 (2/12) Arhitectura navigatorului Web
CLIW 2017-2018 (2/12) Arhitectura navigatorului Web
 
Interactiunea cu Utilizatorul în Python, Java.pptx
Interactiunea cu Utilizatorul în Python, Java.pptxInteractiunea cu Utilizatorul în Python, Java.pptx
Interactiunea cu Utilizatorul în Python, Java.pptx
 
Proiect pw
Proiect pwProiect pw
Proiect pw
 
Carte catia gratuita
Carte catia gratuitaCarte catia gratuita
Carte catia gratuita
 

Más de Dragos Tudor Acostachioaie

Más de Dragos Tudor Acostachioaie (10)

Ce mai este nou in open-source si nu numai
Ce mai este nou in open-source si nu numaiCe mai este nou in open-source si nu numai
Ce mai este nou in open-source si nu numai
 
Realizarea unui cloud privat cu tehnologii open-source
Realizarea unui cloud privat cu tehnologii open-sourceRealizarea unui cloud privat cu tehnologii open-source
Realizarea unui cloud privat cu tehnologii open-source
 
Introduction to Qt programming
Introduction to Qt programmingIntroduction to Qt programming
Introduction to Qt programming
 
Linux distributions. Ubuntu Server
Linux distributions. Ubuntu ServerLinux distributions. Ubuntu Server
Linux distributions. Ubuntu Server
 
Dela e-mail la Social Web
Dela e-mail la Social WebDela e-mail la Social Web
Dela e-mail la Social Web
 
Imbunatatirea securitatii sistemelor Linux cu ajutorul grsecurity
Imbunatatirea securitatii sistemelor Linux cu ajutorul grsecurityImbunatatirea securitatii sistemelor Linux cu ajutorul grsecurity
Imbunatatirea securitatii sistemelor Linux cu ajutorul grsecurity
 
Remember
RememberRemember
Remember
 
Moodle patru ani de ectivitate în învăţământul
Moodle   patru ani de ectivitate în învăţământulMoodle   patru ani de ectivitate în învăţământul
Moodle patru ani de ectivitate în învăţământul
 
Introducere in Flex si AIR
Introducere in Flex si AIRIntroducere in Flex si AIR
Introducere in Flex si AIR
 
Razboiul din fiecare birou
Razboiul din fiecare birouRazboiul din fiecare birou
Razboiul din fiecare birou
 

Realizarea de aplicatii pentru Android utilizand Qt

  • 1. Realizarea de aplicații pentru Android utilizând Qt Dragoş Acostăchioaie http://www.unixinside.org dragos@unixinside.org Şcoala de vară “Informatică la castel”, Macea, 24 - 30 august 2015
  • 2. Dragoş Acostăchioaie - http://www.unixinside.org Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015 Ce este Qt Qt. Code less. Create more. Deploy everywhere ✗ Facilitează dezvoltarea de aplicații și interfețe utilizator independente de platformă ✗ Este suportată o largă varietate de platforme desktop, mobile și embedded ✗ Nu este necesară rescrierea codului sursă ✗ Este open-source
  • 3. Dragoş Acostăchioaie - http://www.unixinside.org Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015 Avantaje de a folosi Qt ✗ un singur cod sursă funcţionează fără modificări pe platforme diferite (write once, run everywhere – vezi şi paradigma de portare a soluţiilor FOSS) ✗ performanţe superioare faţă de limbajele care rulează într-o maşină virtuală (ex Java), fiindcă codul binar se execută nativ, rezultând un consum semnificativ mai redus de resurse ✗ utilizează sistemul grafic al sistemului de operare pe care rulează; astfel, aplicaţiile au aspectul şi comportamentul nativ al sistemului gazdă ✗ trecerea de la un sistem de operare la altul nu necesită modificări ale codului sursă, ci doar compilarea acestuia pe fiecare platformă în parte (dacă nu s-au folosit functionalităţi/biblioteci specifice) ✗ asigură codul sursă împotriva schimbărilor viitoare ale platformelor gazdă (la nivel sursă sau binar; dezvoltatorii se pot astfel concentra pe dezvoltarea aplicaţiilor, nu pe modificările API-ului) ✗ pot fi atinse mai uşor pieţe multiple (dedicate diferitelor sisteme de operare), cu costuri mai mici de mentenanță a codului
  • 4. Dragoş Acostăchioaie - http://www.unixinside.org Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015 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 ✗ BlackBerry Platforme Embedded ✗ Embedded Android ✗ Embedded Linux ✗ Windows Embedded, Windows CE, WinRT ✗ Real-time operating systems (ex QNX, VxWorks)
  • 5. Dragoş Acostăchioaie - http://www.unixinside.org Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015 În ce limbaje putem programa folosind Qt ✗ Limbaje native: C++ și QML ✗ Poate interacționa cu alte limbaje (engl. language bindings): Java (QtJambi), Ruby, C#, C++11 ✗ Limbaje de scripting suportate: QML (nativ), JavaScript, Phyton
  • 6. Dragoş Acostăchioaie - http://www.unixinside.org Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015 Ce medii integrate sunt compatibile cu Qt ✗ Qt Creator ✗ Eclipse ✗ Microsoft Visual Studio
  • 7. Dragoş Acostăchioaie - http://www.unixinside.org Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015 Ce poate face Qt Creator ✗ Gestiunea proiectului ✗ Editarea codului sursă ✗ Controlul versiunilor ✗ Proiectarea interfeței ✗ Help integrat ✗ Generarea codului binar ✗ Depanarea aplicaţiei ✗ Publicarea aplicației
  • 8. Dragoş Acostăchioaie - http://www.unixinside.org Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015 Ce poate face Qt Creator Vrăjitor (wizard) pentru proiecte Qt ✗ realizează proiecte noi Qt ✗ generează automat proiectul şi fişierele de bază Editor avansat de cod sursă C++/QML/Javascript ✗ syntax highlighting ✗ completare automată a codului ✗ marcarea automată a erorilor de sintaxă în timpul editării ✗ auto-indentare ✗ posibilitatea de expandare/restrângere a funcţiilor ✗ căutare incrementală a cuvintelor-cheie în timpul editării ✗ comutarea uşoară între declaraţia şi definiţia unei metode ✗ posibilitatea de a face semne de carte în cadrul codului sursă ✗ posibilitatea de a lucra fără mouse şi de a deschide ferestre de editare multiple
  • 9. Dragoş Acostăchioaie - http://www.unixinside.org Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015 Proiectarea interfeței utilizator cu Qt Creator Qt Designer ✗ Utilizat pentru proiectarea interfeței utilizator a aplicațiilor pe platforme desktop ✗ Se bazează pe editarea de widget-uri și form-uri ✗ Permite utilizarea mecanismului de semnale și sloturi ✗ Interfața utilizator este salvată în fișiere XML Qt Quick Designer ✗ Utilizat pentru proiectarea interfeței utilizator a aplicațiilor pe platforme mobile ✗ Permite două moduri de lucru, editare și design
  • 10. Dragoş Acostăchioaie - http://www.unixinside.org Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015 Ce poate face Qt Creator Help pentru biblioteca Qt integrat ✗ poate fi accesat în timpul editării prin poziţionarea pe un cuvânt-cheie Sistem de compilare a proiectului ✗ prin intermediul sistemului qmake (propriu Qt) sau prin Cmake Sistem de gestiune a fişierelor din proiect ✗ permite localizarea uşoară a unui fişier din proiect după tipul şi numele acestuia Sisteme de control al versiunilor ✗ sunt suportate: Git, Subversion (SVN), CVS şi Perforce
  • 11. Dragoş Acostăchioaie - http://www.unixinside.org Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015 Ce poate face Qt Creator Compilarea aplicației ✗ Sunt suportate gcc şi gdb, precum și Microsoft Visual Studio compiler ✗ Pot fi stabilite individual configurările pentru fiecare platformă în parte și se poate comuta rapid între platforme ✗ Se pot crea versiuni diferite ale proiectului, pentru a păstra separat codul sursă dependent de platformă ✗ Generează automat pachetele care vor transferate pe dispozitivul mobil în vederea executării aplicației direct pe acesta
  • 12. Dragoş Acostăchioaie - http://www.unixinside.org Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015 Ce poate face Qt Creator Depanarea aplicației ✗ pot fi stabilite puncte de întrerupere, rula aplicaţia linie-cu-linie sau instrucţiune-cu- instrucţiune, examina conţinutul variabilelor locale şi globale ✗ Permite depanarea inclusiv a funcțiilor Javascript ✗ Dacă aplicația este testată direct pe dispozitivul mobil sau în emulator, mesajele vor apărea în consola QtCreator ✗ Dacă se stabilesc puncte de oprire (breakpoints), în consola QML/Javascript pot fi executate expresii Javascript ✗ În timpul execuției, poate fi explorată structura obiectelor
  • 13. Dragoş Acostăchioaie - http://www.unixinside.org Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015 Ce poate face Qt Creator Publicarea aplicației ✗ Permite crearea pachetelor necesare publicării aplicației pentru dispozitive mobile, utilizând magazinele de aplicații (Apple Store, Google Play) Qt Installer ✗ arhitectură care oferă un set de instrumente şi utilitare pentru realizarea de sisteme de instalare ale aplicaţiilor ✗ funcţionează pe Linux, MacOS şi Windows şi au aspectul nativ al platformei utilizate ✗ sistemul de instalare este configurabil, putându-se adăuga noi widget-uri şi crea scripturi pentru a realiza operaţiuni noi ✗ sistemul de instalare poate fi offline (conţin toate componentele necesare) sau online (conţinutul poate fi descărcat de pe un server Web) ✗ oferă şi posibilitatea de actualizare ulterioară a conţinutului aplicaţiei http://doc.qt.io/qt-5/publishtogoogleplay.html
  • 14. Dragoş Acostăchioaie - http://www.unixinside.org Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015 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
  • 15. Dragoş Acostăchioaie - http://www.unixinside.org Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015 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 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 Script Tools ✗ 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
  • 16. Dragoş Acostăchioaie - http://www.unixinside.org ✗ Permite execuția de aplicații Qt5 pe dispozitive care rulează Android v2.3.3 sau mai nouă ✗ Sunt suportate toate modulele Qt, exceptând Qt WebKit, Qt NFC, Qt SerialPort și cele specifice unor platforme (Qt MacExtras, Qt WindowsExtras, Qt X11Extras) Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015 Ce este Qt pentru Android http://doc.qt.io/qt-5/android-support.html
  • 17. Dragoş Acostăchioaie - http://www.unixinside.org ✗ Android SDK Tools (instrumente pentru dezvoltarea și depanarea de aplicații Android) ✗ Android NDK (permite dezvoltarea de cod pentru Android in C/C++) ✗ Apache Ant v1.8 sau mai nouă (instrumente pentru generarea de aplicații 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 Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015 Ce ne trebuie http://doc.qt.io/qt-5/androidgs.html
  • 18. Dragoş Acostăchioaie - http://www.unixinside.org ✗ Executare direct pe dispozitiv. Consola de mesaje se va regăsi î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 proprietățile dispozitivului virtual. Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015 Cum executăm aplicația Android doc.qt.io/qtcreator/creator-developing-android.html
  • 19. Dragoş Acostăchioaie - http://www.unixinside.org #include <QApplication> #include <QQmlApplicationEngine> #include <QQmlContext> #include "background.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); QQmlApplicationEngine engine; // încărcare componentă vizuală engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); Background backgrd; // expunere C++ la QML engine.rootContext()->setContextProperty("app", &backgrd); return app.exec(); } Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015 Exemplu de aplicație Android
  • 20. Dragoş Acostăchioaie - http://www.unixinside.org #ifndef BACKGROUND #define BACKGROUND #include <QObject> class Background : public QObject { Q_OBJECT public: 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 Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015 Exemplu de aplicație Android
  • 21. Dragoş Acostăchioaie - http://www.unixinside.org import QtQuick 2.4 import QtQuick.Controls 1.3 import QtQuick.Window 2.2 import QtQuick.Dialogs 1.2 import QtQuick.Layouts 1.1 ApplicationWindow { title: "Autentificare" width: 640 height: 480 visible: true MessageDialog { id: dialog title: "Mesaj" icon: StandardIcon.Question // proprietate atașată (binding) - se actualizează la schimbarea valorii text: "Rezultat autentificare: " + rez standardButtons: StandardButton.Ok property string rez } Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015 Exemplu de aplicație Android
  • 22. Dragoş Acostăchioaie - 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 } Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015 Exemplu de aplicație Android
  • 23. Dragoş Acostăchioaie - 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") } } } } Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015 Exemplu de aplicație Android
  • 24. Dragoş Acostăchioaie - http://www.unixinside.org Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015 Resurse ✗ Qt documentation - http://qt-project.org/doc/ ✗ Mark Summerfield books - http://www.qtrac.eu/marksummerfield.html ✗ Learning Qt videos - https://www.ics.com/learning/icsnetwork