1. Qt Application Development
Dragoş Acostăchioaie
http://www.unixinside.org
dragos@unixinside.org
Open Source Camp, Iași, 7 - 8 mai 2016
2. Dragoş Acostăchioaie - http://www.unixinside.org
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
Open Source Camp, Iași, 7 - 8 mai 2016
3. Dragoş Acostăchioaie - http://www.unixinside.org
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 open source)
✗ 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
Open Source Camp, Iași, 7 - 8 mai 2016
4. Dragoş Acostăchioaie - http://www.unixinside.org
✗ 1994 – este lansată prima versiune Qt, de către 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 cumpărat de Nokia (progres considerabil în dezvoltarea Qt pe
platforme mobile)
✗ 2011 – Digia (Finlanda) cumpără Qt de la Nokia
✗ Decembrie 2012 – este lansat Qt 5, având model de dezvoltare open source
✗ Septembrie 2014 – Qt este transferat catre Qt Company, aparținând Digia
Open Source Camp, Iași, 7 - 8 mai 2016
Scurt istoric
5. Dragoş Acostăchioaie - http://www.unixinside.org
✗ Mediul desktop KDE și majoritatea aplicațiilor KDE
✗ Ubuntu Touch
✗ webOS
✗ Skype
✗ VLC media player
✗ Google Earth
✗ Aplicații 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, Iași, 7 - 8 mai 2016
Aplicații care utilizează Qt
6. Dragoş Acostăchioaie - 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, Iași, 7 - 8 mai 2016
7. Dragoş Acostăchioaie - http://www.unixinside.org
În ce limbaje putem programa folosind Qt
✗ Limbaje native: C++ și QML
✗ QML – limbaj declarativ care permite descrierea interfeței utilizator, alcătuită din
componente vizuale și definirea modurilor de interacțiune/relaționare dintre acestea
✗ Poate interacționa cu alte limbaje (engl. language bindings): Java (QtJambi), Ruby,
C#, C++11
✗ Limbaje de scripting suportate: QML (nativ), JavaScript, Phyton
Open Source Camp, Iași, 7 - 8 mai 2016
8. Dragoş Acostăchioaie - http://www.unixinside.org
Ce medii integrate sunt compatibile cu Qt
✗ Qt Creator
✗ Eclipse
✗ Microsoft Visual Studio
Open Source Camp, Iași, 7 - 8 mai 2016
http://qt.io
9. Dragoş Acostăchioaie - http://www.unixinside.org
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
Open Source Camp, Iași, 7 - 8 mai 2016
10. Dragoş Acostăchioaie - http://www.unixinside.org
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
Open Source Camp, Iași, 7 - 8 mai 2016
11. Dragoş Acostăchioaie - http://www.unixinside.org
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
✗ Suportă machete de interfață multiple (ex telefon / tabletă / desktop), fără a
necesita modificarea codului sursă
Open Source Camp, Iași, 7 - 8 mai 2016
12. Dragoş Acostăchioaie - http://www.unixinside.org
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
Open Source Camp, Iași, 7 - 8 mai 2016
13. Dragoş Acostăchioaie - http://www.unixinside.org
Ce poate face Qt Creator
Compilarea aplicației
✗ Sunt suportate gcc, gdb, Clang 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
Open Source Camp, Iași, 7 - 8 mai 2016
14. Dragoş Acostăchioaie - http://www.unixinside.org
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
Open Source Camp, Iași, 7 - 8 mai 2016
15. Dragoş Acostăchioaie - http://www.unixinside.org
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 (App Store, Google Play, Windows Store)
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 are aspectul nativ al platformei gazdă
✗ 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
Open Source Camp, Iași, 7 - 8 mai 2016
16. Dragoş Acostăchioaie - 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, Iași, 7 - 8 mai 2016
17. Dragoş Acostăchioaie - 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, Iași, 7 - 8 mai 2016
18. Dragoş Acostăchioaie - 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, Iași, 7 - 8 mai 2016
19. 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)
Ce este Qt pentru Android
http://doc.qt.io/qt-5/android-support.html
Open Source Camp, Iași, 7 - 8 mai 2016
20. 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
Ce ne trebuie pentru platforma Android
http://doc.qt.io/qt-5/androidgs.html
Open Source Camp, Iași, 7 - 8 mai 2016
21. 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.
Cum executăm aplicația Android
doc.qt.io/qtcreator/creator-developing-android.html
Open Source Camp, Iași, 7 - 8 mai 2016
22. Dragoş Acostăchioaie - http://www.unixinside.org
✗ Permite execuția de aplicații Qt5 pe dispozitive care rulează iOS
✗
Cerințe 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, Iași, 7 - 8 mai 2016
23. 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();
}
Exemplu de aplicație pentru dispozitiv mobil
Open Source Camp, Iași, 7 - 8 mai 2016
24. 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
Open Source Camp, Iași, 7 - 8 mai 2016
Exemplu de aplicație pentru dispozitiv mobil
25. 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
}
Open Source Camp, Iași, 7 - 8 mai 2016
Exemplu de aplicație pentru dispozitiv mobil
26. 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
}
Open Source Camp, Iași, 7 - 8 mai 2016
Exemplu de aplicație pentru dispozitiv mobil
27. 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")
}
}
}
}
Open Source Camp, Iași, 7 - 8 mai 2016
Exemplu de aplicație pentru dispozitiv mobil
28. Dragoş Acostăchioaie - 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, Iași, 7 - 8 mai 2016