Qt Application Development
Drago Acostchioaie
http://www.unixinside.org
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
Top Related