Qt

Qt Bildebeskrivelse Qt Creator 3.1.1 redigere en eksempel UI-fil fra Qt 5.3 ved hjelp av Designer.png. Informasjon
Utviklet av
Første versjon 1995
Siste versjon 6.1 (6. mai 2021)
Innskudd code.qt.io/cgit/qt/qtbase.git
Prosjekt status Aktiv
Skrevet i C ++
Operativsystem GNU / Linux , Microsoft Windows , macOS , BSD ( d ) , Android og iOS
Miljø GNU / Linux , Windows , Windows CE , Mac OS X , BSD , Unix , Symbian OS , Maemo , Tizen , Genode
Type oppretting av grafiske grensesnitt
Tillatelse GNU GPL v2, GNU LGPL 3 fra Qt 5.7
Dokumentasjon doc.qt.io
Nettsted www.qt.io

Qt (offisielt uttalt på engelsk søt ( / kjuːt / ) men ofte uttalt QT ( /ˈkjuː.ˈtiː/ )):

Qt tillater bærbarhet av applikasjoner som bare bruker komponentene ved å bare kompilere kildekoden på nytt. Støttede miljøer er Unix (inkludert GNU / Linux ) som bruker X Window System eller Wayland grafikksystem , Windows , Mac OS X , Tizen og også Genode . Det faktum å være et multiplatform programvarebibliotek tiltrekker seg et stort antall mennesker som derfor har muligheten til å kringkaste programmene sine på det eksisterende eksisterende operativsystemet.

Qt integrerer bindinger med mer enn ti andre språk enn C ++, som Ada, C #, Java, Python, Ruby, Visual Basic, etc.

Qt er spesielt kjent for å være rammeverket som KDE Plasma- grafiske miljø er basert på , et av standard skrivebordsmiljøene for flere GNU / Linux-distribusjoner .

Historie

Det er på Norsk institutt for teknologi i Trondheim at Haavard Nord ( administrerende direktør i Trolltech ) og Eirik Chambe-Eng (president i Trolltech ) møtes. I 1988 fikk Haavard Nord i oppdrag av et svensk selskap å utvikle et programvarebibliotek i C ++ for å administrere et grafisk grensesnitt , det var første gang han begynte å uttale emnet. To år senere, med Chambe-Eng, utvikler de et multiplatform-program ( Unix , Macintosh og Windows ) og begynner seriøst å tenke på utformingen av et generalistisk multiplatform-grafikkbibliotek.

I 1991 begynte de å utvikle dette biblioteket. Året etter foreslo Chambe-Eng prinsippet om "  signaler og spor  ", som ble hjørnesteinen i Qt. Og i 1993 var kjernen i Qt klar og tillot informatikere å utvikle sine egne grafikkomponenter. Det er på slutten av året at Haavard Nord foreslår å opprette et selskap for å markedsføre biblioteket deres.

Quasar Technologies ble opprettet den4. mars 1994og omdøpt seks måneder senere til Troll Tech, deretter Trolltech, deretter Qt Software og til slutt Qt Development Frameworks . Begynnelsen er spesielt vanskelig økonomisk. Men de er heldige som er gift: konene deres støtter dem.

Prosjektet ble kalt Qt fordi karakteren Q fin ut i Haavards Emacs- skript , og t er fra Xt Xtoolkit . Alt dette uttales på engelsk søt , som betyr "søt". Når det ikke er små bokstaver, uttal ikke cutie ( /ˈkjuː.ti/ ): det er ikke et akronym (QT).

Det er inne April 1995at Trolltech har sin første kunde, det norske selskapet Metis. Og i nesten et år har hun ingen andre, noe som gjør selskapet veldig skjørt økonomisk. Den andre klienten, European Space Agency (ESA), kjøper ti lisenser fra den iMars 1996.

Qt1

De 26. mai 1995den første offentlige versjonen av Qt kunngjøres på nyhetsgruppen comp.os.linux.announce. Og et år senere versjon 0.97, deretter24. september 1996 versjon 1.0 er utgitt og kunngjort noen dager senere.

Det var i 1997 at KDE- prosjektet ble lansert av Matthias Ettrich (som ble ansatt av Trolltech året etter). Sistnevnte tar beslutningen om å bruke Qt som basisbibliotek. Det faktum at et prosjekt av denne størrelsen bruker Qt, vil være en flott annonse for Trolltech og dets bibliotek. Siden da har båndene mellom Trolltech og KDE bare blitt sterkere.

Qt2

Den andre store versjonen av Qt er utgitt i Juni 1999og en versjon for innebygde systemer , Qt / Embedded , siden kjent som Qtopia , ble utgitt i 2000 . Denne siste versjonen er utviklet for Linux og bruker sin framebuffer direkte , uten å gå gjennom X11 vindussystemet (som er uegnet for embedded systemer).

Qt3

De to første store versjonene av Qt er bare tilgjengelig for X11 og Windows , støtte for Mac OS X leveres med versjon 3.0, utgitt i 2001 . Sammenlignet med versjon 2.0 gir denne nye versjonen bedre støtte for internasjonalisering , Unicode og regulære uttrykk som i Perl .

Qt4

De 28. juni 2005, versjon 4 er utgitt og forbedrer spesielt gjengivelsesmotoren , nå kalt Arthur , skillet mellom data og presentasjon og skiller biblioteket i moduler:

I tillegg, for den kommersielle versjonen under Windows, er det to andre moduler knyttet til bruken av ActiveX  : QAxContainer og QAxServer .

Med utviklingen av Qt 4 er andre moduler designet:

De 28. januar 2008, Nokia lanserer et vennlig overtakelsestilbud for å kjøpe Qt og Trolltech . Trolltech, omdøpt til Qt Software , blir en divisjon av Nokia. Derfor tar Nokia avgjørelsenjanuar 2009 å senke så mange barrierer som mulig for å lette adopsjonen av Qt, som siden har blitt brukt av deres interne utvikling:

Nokia fokuserer på nytt på Windows, det gir inn mars 2011Qts tjenester og kommersiell lisensadministrasjonsaktivitet til Digia. De9. august 2012, avgir den fullstendig forvaltningen av Qt-rammeverket til Digia for en sum på 4,9 millioner € (mot 150 millioner i 2008). Digia kunngjør at de ønsker å utvide Qts integrasjon til Android , iOS og Windows 8 .

Qt5

Qt 5.0 ble utgitt den 19. desember 2012. Selv om det er markert store endringer på mange punkter (viktig rolle for QML og JavaScript for å lage grafiske grensesnitt med Qt Quick, separasjon i uavhengige moduler for å lette leveranser, abstraksjonslag for å lette portering osv.), Bryter bytte til Qt5 i det minste kompatibilitet på kildenivået. På denne måten er overgangen mye enklere enn for Qt4.

Qt 5.x-versjoner bruker plugins som kreves for distribusjon av programmet.

Qt Rask

Qt Quick er et gratis rammeverk utviklet og vedlikeholdt av Digia som en del av Qt-biblioteket, og gir muligheten til å lage tilpassbare og dynamiske brukergrensesnitt med jevne overgangseffekter på en deklarativ måte. Denne typen dynamisk grensesnitt er mer og mer vanlig, spesielt på smarttelefoner. Qt Quick inkluderer et deklarativt skriptspråk kalt QML som kan sammenlignes med XAML opprettet av Microsoft for sitt WPF- bibliotek .

Qt Quick og QML er offisielt levert siden Qt 4.7 (med Qt Creator 2.1).

Lisenser

Den KDE GUI -prosjektet brukt Qt biblioteket fra start. Men med suksessen til dette miljøet, noen del av fri programvare samfunnet kritiserte Qt lisens for å være proprietær og uforenlig med GNU GPL brukes av KDE . Dette problemet ble løst av selskapet Trolltech som satte GNU / Linux og UNIX-versjonene av Qt under GNU GPL-lisensen da den utviklede applikasjonen også var under GNU GPL. For resten er det kommersiell lisens som trer i kraft. Denne policyen for to lisenser ble bare brukt for GNU / Linux og UNIX, men siden Qt versjon 4.0 brukes den for alle systemer.

KDE Free Qt Foundation ble opprettet i juni 1998 og er ansvarlig for å sikre tilgjengeligheten av Qt for utvikling av gratis programvare. I henhold til en avtale med Trolltech , har denne stiftelsen rett til å distribuere Qt under en BSD-stil lisens i tilfelle Trolltech opphører utviklingen av gratisversjonen av forskjellige årsaker, inkludert søknad om konkurs . Oppkjøpet av Trolltech av Nokia den28. januar 2008stiller ikke spørsmål ved den doble lisenspolitikken, det finske selskapet støtter til og med KDE .

De 18. januar 2008, Kunngjør Trolltech at versjon 3 og 4 av Qt er fra denne datoen under lisens GPLv2 og GPLv3. Denne versjonsendringen gjelder bare de gratis versjonene av Qt. Dermed ser ikke versjon 3 av Qt for Windows, som ikke er gratis, ikke lisensendringen. Denne endringen er en del av KDEs ønske om også å bytte til versjon 3 av GPL, i tillegg til versjon 2 som allerede er i bruk.

Et år senere, 14. januar 2009, Kunngjør Trolltech at fra og med Qt 4.5 vil Qt også være tilgjengelig under LGPL v2.1-lisensen. Denne nye lisensen tillater således utvikling av proprietær programvare , uten at det kreves kjøp av en kommersiell lisens fra Qt Development Frameworks. Denne endringen, ønsket av Nokia for å sikre at Qt brukes av så mange prosjekter som mulig, er muliggjort av det faktum at Nokia kan klare seg uten salg av kommersielle lisenser, i motsetning til Trolltech, som ikke kunne klare seg uten denne inntektskilden.

Arkitektur

Generell struktur

Den Qt API består av klasser med navn innledes med Q og hvert ord som begynner med stor bokstav (f.eks :)QLineEdit , er dette den kamelen saken typografi . Disse klassene har ofte opplistede typer deklarert i navneområdet som attributter Qt. Bortsett fra en ren objektarkitektur, implementeres noen grunnleggende funksjoner av makroer (tegnstreng å oversette med tr, vises på standardutdata med qDebug...).

Metodene for navngivningskonvensjoner er ganske like de for Java: det lille kamelvesen brukes, dvs. at alle ord bortsett fra de første er store og små bokstaver (f.eks :) indicatorFollowsStyle(), modifikatorer blir foran set, på den annen side, aksessorer tar bare navnet på attributt (ex :) text()eller start med isi tilfelle booleans (ex :) isChecked().

Objekt tre

Qt-objekter (de som arver fra QObject) kan organisere seg i et tre . Når en klasse blir instansert, kan vi altså definere et overordnet objekt for den. Denne organiseringen av objekter i form av et tre letter minnehåndtering fordi før et foreldreobjekt blir ødelagt, kaller Qt rekursivt destruktoren til alle barna.

Denne forestillingen om et objekttre gjør det også lettere å feilsøke, ved å kalle metoder som QObject::dumpObjectTree()og Object::dumpObjectInfo().

Meta-objekt kompilator

Den moc (for Meta Object Iler ) er en preprosessor som, anvendt før kompilering av kildekoden til et Qt program genererer metainformasjon vedrørende de klasser som benyttes i programmet. Denne metainformasjonen brukes deretter av Qt for å gi funksjoner som ikke er tilgjengelige i C ++, for eksempel signaler og spor og introspeksjon .

Bruken av et slikt tilleggsverktøy skiller Qt-programmer fra standard C ++ språk. Denne operasjonen blir sett på av Qt Development Frameworks som et nødvendig kompromiss for å gi introspeksjon og signalmekanismer. Da Qt 1.x ble utgitt, var implementering av maler av C ++ - kompilatorer ikke tilstrekkelig konsekvent.

Signaler og spor

Signaler og spor er en implementering av Observer Design Pattern . Tanken er å koble objekter til hverandre via signaler som overføres og mottas av spor. Fra utviklerens synspunkt er signaler representert som enkle metoder for senderklassen, som det ikke er noen implementering av. Disse "metodene" kalles i det følgende ved å gå foran "emit", som betegner utsendelsen av signalet. For sin del er sporet som er koblet til et signal, en metode for mottakerklassen, som må ha samme signatur (med andre ord de samme parameterne som signalet som den er koblet til), men i motsetning til signaler, må den implementeres. av utvikleren. Koden for denne implementeringen representerer handlingene som skal utføres ved mottak av signalet.

MOC er ansvarlig for å generere C ++ -koden som er nødvendig for å koble signalene og sporene.

Grensesnittdesigner

Qt Designer er programvare som lar deg lage Qt grafiske grensesnitt i et brukervennlig miljø. Brukeren, ved å dra og slippe , plasserer GUI-komponentene og setter enkelt deres egenskaper der. GUI-filer er formatert i XML og har filtypen .ui .

Under kompilering konverteres en GUI-fil til en C ++ -klasse av verktøyet uic. Det er flere måter utvikleren kan bruke denne klassen:

qmake

Qt som ønsket å være et bærbart utviklingsmiljø og ha MOC som et mellomtrinn før kompilerings- / koblingsfasen , var det nødvendig å designe en spesifikk produksjonsmotor . Slik utformes programmet qmake.

Sistnevnte tar som inndata en fil (med utvidelsen .pro) som beskriver prosjektet (liste over kildefiler, avhengigheter, parametere sendt til kompilatoren , etc.) og genererer en prosjektfil spesifikk for plattformen. Under UNIX- systemer qmakeproduseres således en Makefile som inneholder listen over kommandoer som skal utføres for å generere en kjørbar, med unntak av trinnene som er spesifikke for Qt (generering av C ++ - klasser når man designer et grafisk grensesnitt med Qt Designer, generering av C ++ kode for å koble signaler og spor, legge til en fil i prosjektet, etc.).

Prosjektfilen er laget for å være veldig enkel å redigere av en utvikler. Den består av en serie variable oppgaver. Her er et eksempel på et lite prosjekt:

TARGET = monAppli SOURCES = main.cpp mainwindow.cpp HEADERS = mainwindow.h FORMS = mainwindow.ui QT += sql

Disse erklæringene krever at den kjørbare filen heter myAppli , gir en liste over kildefiler, overskrifter og GUI-filer. Den siste linjen erklærer at prosjektet krever Qt SQL- modulen .

Internasjonalisering

Qt integrerer sitt eget oversettelsessystem, som i prinsippet ikke er forskjellig fra gettext- biblioteket . I følge Qt Linguist-manualen oppnås internasjonalisering gjennom samarbeid mellom tre typer mennesker: utviklere , prosjektleder og oversettere .

I kildekoden skriver utviklerne strenger på sitt eget språk. De må tillate oversettelse av disse strengene takket være metoden tr(). Hvis det er noen tvetydighet om betydningen av et uttrykk, kan de også indikere kommentarer ment å hjelpe oversetterne.

Prosjektlederen erklærer oversettelsesfilene (en for hvert språk) i prosjektfilen. Verktøyet lupdateskanner kildene etter strenger for å oversette og synkroniserer oversettelsesfilene med kildene. Oversettelsesfiler er XML- filer med filtypen .ts .

Oversettere bruker Qt Linguist til å fylle ut oversettelsesfiler. Når oversettelsene er ferdige, kan prosjektlederen kompilere .ts- filene ved hjelp av verktøyet lreleasesom genererer binære filer med .qm- utvidelsen , som kan brukes av programmet. Disse filene leses ved kjøretid, og strengene som finnes i dem erstatter de som er skrevet av utviklerne.

Stil

Biblioteket bygger inn forskjellige widget-temaer som gir det en god visuell integrering på alle plattformer. På GNOME- , Mac OS X- og Windows- skrivebordsmiljøer har Qt-applikasjoner dermed utseendet til innfødte applikasjoner.

Qt lar deg tilpasse utseendet til forskjellige GUI-komponenter ved å bruke prinsippet om Cascading Style Sheets (CSS).

utviklingsverktøy

Qt Development Frameworks tilbyr et sett med gratis programvare for å lette utviklingen av Qt-applikasjoner:

Selv om Qt Creator blir spioneringen som standardutviklingsmiljø for Qt, finnes det Qt-moduler for Eclipse og Visual Studio- utviklingsmiljøer . Det er andre IDE-er beregnet på Qt og utviklet uavhengig av Nokia, for eksempel QDevelop og Monkey Studio .

Bindinger

Noen bindinger eksisterer for å kunne bruke Qt med andre språk enn C ++. Dermed kan språkene Ada , C # og Visual Basic ( Qt # ), D , F # (Qt #), Java ( Qt Jambi ), OCaml , Perl , PHP , Python , Ruby ( QtRuby ), Scheme brukes.

Bruker

Flere og flere utviklere bruker Qt, blant store selskaper. Disse inkluderer: Google , Adobe Systems , Skype eller NASA . Digias nettsted viser selskaper som bruker Qt og Qt-baserte applikasjoner.

Syntaks

Den klassiske "  Hello World  " på forskjellige språk: C ++ , Java (med QtJambi ), Python (med PyQt og PySide ) og C # (med Qyoto ):

.pro

TEMPLATE += app QT += widgets

C ++

#include <QApplication> #include <QPushButton> int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton bouton("Hello world!"); bouton.show(); return app.exec(); }

La oss studere disse linjene.

#include <QApplication> : Inkluderer topptekst QApplication, nødvendig for å kunne bruke klassen QApplication.

#include <QPushButton>: Samme, men for klassen QPushButton.

int main(int argc, char *argv[]) { : Start av funksjonen som mainutføres når programmet startes.

QApplication app(argc, argv); : Lag et objekt QApplication, dette trinnet er obligatorisk før du bruker widgets ( QWidget).

QPushButton bouton("Hello world!"); : Lag et objekt QPushButton(som er ett QWidget). Dette objektet visualiseres med en knapp som viser teksten "Hello world!".

bouton.show(); : Kaller funksjonen showtil objektet for boutonå gjøre det synlig (som standard er knappen usynlig).

return app.exec(); : Kaller funksjonen exectil app, og returnerer resultatet. Denne funksjonen kjører til brukeren lukker alle synlige vinduer, i dette tilfellet til brukeren lukker det tilsvarende vinduet bouton.

Java ( QtJambi )

import com.trolltech.qt.gui.QApplication; import com.trolltech.qt.gui.QPushButton; public class HelloWorld { public static void main(String args[]) { QApplication.initialize(args); QPushButton hello = new QPushButton("Hello World!"); hello.show(); QApplication.exec(); } }

Python ( PyQt )

from PyQt4 import QtGui, QtCore import sys app = QtGui.QApplication(sys.argv) hello = QtGui.QPushButton("Hello World!", None) hello.show() app.exec_()

Python ( PySide )

from PySide import QtGui import sys app = QtGui.QApplication(sys.argv) hello = QtGui.QPushButton("Hello World!", None) hello.show() app.exec_()

C # ( Qyoto )

using System; using Qyoto; public class HelloWorld { public static int Main(String[] args) { QApplication app = new QApplication(args); QPushButton hello = new QPushButton("Hello world!"); hello.Show(); return QApplication.Exec(); } }

Merknader og referanser

  1. Qt 6.1 Utgitt  " (åpnet 21. mai 2021 )
  2. "  Ny avtale med KDE Free Qt Foundation og endringer for åpen kildekodeversjon  " , på qt.io (åpnet 17. august 2020 ) .
  3. (in) Christian D. Kamm, "  uttale Qt under utgivelsen av SDK 1.1  " , Qt Studio ,27. april 2011(åpnet 3. august 2011 ) .
  4. (en) Jasmin Blanchette and Mark Summerfield, C ++ GUI Programming with Qt 4 , Prentice Hall,21. juni 2006, 560  s. ( ISBN  978-0-13-187249-3 , leses online ) , "A Brief History of Qt".
  5. (in) "  Beta-lignende mønster av C ++ bibliotek tilgjengelig  " , Trolltech ,26. mai 1995(åpnet 13. desember 2007 ) .
  6. (in) "  Qt 1.0 utgitt (c ++ gui-bibliotek)  " , Trolltech ,1 st oktober 1996(åpnet 13. desember 2007 ) .
  7. (in)
  8. Qt online dokumentasjon
  9. denne modulen, ansett som foreldet, forsvinner i Qt 4.6. Den eneste klassen som er en del av den, forblir til stede av kompatibilitetsårsaker
  10. Aaron Seigo, “  Qt goes LGPL!  " ,14. januar 2009(åpnet 14. januar 2009 )
  11. Nokia overleverer Qt-lisensadministrasjon til Digia
  12. http://www.digia.com/en/Home/Company/News/Digia-to-acquire-Qt-from-Nokia/ "Arkivert kopi" (versjon 22. juli 2018 på internettarkivet )
  13. Digia skal betale Nokia € 4 millioner for Qt når rammeverket går mot en plattformplattform
  14. http://qt-project.org/wiki/Qt_5.0
  15. (no) "  KDE Free Qt Foundation  " , KDE (åpnet 28. januar 2008 )
  16. (in) "  Åpent brev til KDE og åpen kildekode - Felles kunngjøring  " , Trolltech og Nokia ,28. januar 2008(åpnet 28. januar 2008 )
  17. (in) "  Trolltech frigjør Qt under GPL v3-lisensen  " , Trolltech ,18. januar 2008(åpnet 19. januar 2008 )
  18. (no) "  Projects / KDE Relicensing  " , KDE (åpnet 19. januar 2008 )
  19. (in) . "  LGPL lisensalternativ lagt til Qt  " , Trolltech ,14. januar 2009(åpnet 14. januar 2009 )
  20. http://doc.trolltech.com/qq/qq13-apis.html
  21. (no) "  Objektstrær og objektseier  " [ arkiv av2. juni 2009] , Qt Development Frameworks ,2009(åpnet 18. juni 2009 )
  22. (no) Bruke moc
  23. (in) Hvorfor bruker Qt ikke maler for signaler og spor?
  24. (in) "  Qt Designer's UI File Format  " , Qt Development Frameworks ,2009(åpnet 17. juni 2009 )
  25. (in) "  Bruke en Designer .ui-fil i applikasjonen din  " , Qt Development Frameworks ,2009(åpnet 17. juni 2009 )
  26. (in) "  Qt Linguist Manual  " , Qt Development Frameworks ,2009(åpnet 23. juni 2009 )
  27. (in) "  Qt Style Sheets  " , Qt Development Frameworks ,2009(åpnet 23. juni 2009 )
  28. (in) "  Qt Eclipse Integration for C ++  " , Qt Development Frameworks ,2009(åpnet 23. juni 2009 )
  29. (in) "  Qt Visual Studio .NET Integration  " , Qt Development Frameworks ,2008(åpnet 23. juni 2009 )
  30. https://techbase.kde.org/Languages/QtSharp
  31. opprinnelig utviklet av Qt Development Frameworks , støtte for denne bindingen er avviklet iFebruar 2009og vedlikeholdet av det overlates til samfunnet etter utgivelsen av kildekoden
  32. PyQt , PySide , PythonQt
  33. https://wiki.qt.io/Category:LanguageBindings
  34. (in) Qt i aksjon

Vedlegg

Relaterte artikler

Andre generalistiske plattformbiblioteker
  • GTK + , brukt av det grafiske GNOME-miljøet
  • wxWidgets , spesielt brukt av aMule

Eksterne linker

Frankofoniske samfunn