Qt

Qt – zestaw przenośnych bibliotek i narzędzi programistycznych dedykowanych dla języków C++, QML i Java. Ich podstawowym składnikiem są klasy służące do budowy graficznego interfejsu programów komputerowych, począwszy od wersji 4.0 Qt zawiera też narzędzia do tworzenia programów konsolowych i serwerów.

Qt jest obecnie rozwijane przez organizację Qt Project, do której oprócz niezależnych twórców Open Source należą m.in. firmy Digia, KDAB, ICS. Digia jest właścicielem praw do komercyjnej wersji Qt oraz do znaków towarowych, po zakupie od firmy Nokia (będącej właścicielem pomiędzy styczniem 2008 a sierpniem 2012).

Charakterystyka środowiska Qt 
Środowisko Qt jest dostępne dla platform: X11 (m.in. GNU/Linux, BSD, Solaris), Windows, Mac OS X, Haiku oraz dla urządzeń wbudowanych opartych na Linuksie (Qt Extended), Windows CE, Symbian, Android. Qt jest podstawą dla m.in. uniksowego środowiska graficznego KDE oraz uniksowych wersji komunikatora internetowego Skype i programu Google Earth.

Biblioteki Qt dostępne są w języku C++ i Java; mogą też być wykorzystywane w programach napisanych w innych językach, m.in. Ada (QtAda), C# (Qyoto/Kimono, QtSharp), Pascal, Perl (Perl Qt4), PHP (PHP-Qt), Ruby (QtRuby) i Python (PyQt, PySide). Charakteryzują się w pełni obiektową architekturą. Zawierają wiele technologii programowania graficznego interfejsu użytkownika, istniejących wcześniej jedynie w Tk: mechanizm sygnałów i slotów, automatyczne rozmieszczanie widżetów oraz zhierarchizowany system obsługi zdarzeń.

Biblioteki Qt, oprócz obsługi interfejsu użytkownika, zawierają także niezależne od platformy systemowej moduły obsługi procesów, plików, sieci, grafiki trójwymiarowej (OpenGL), baz danych (SQL), języka XML, lokalizacji, wielowątkowości, zaawansowanej obsługi napisów oraz wtyczek. Zawierają także własne, niezależne od biblioteki STL szablony klas kontenerów.

W skład Qt wchodzi wiele specjalistycznych narzędzi programistycznych. Są to m.in.:
 moc (Meta Object Compiler) – specjalny preprocesor, który na podstawie plików nagłówkowych (*.h) generuje dodatkowe pliki źródłowe (*.cpp)
 uic (User Interface Compiler) – kompilator plików *.ui zwykle generowanych za pośrednictwem programu Qt Designer
 qmake – program do zarządzania procesem kompilacji; jego głównym zadaniem jest utworzenie, a później aktualizacja pliku Makefile na podstawie prostego opisu zawartego w definicji projektu (*.pro)
 Qt Designer – aplikacja graficzna do definiowania graficznego interfejsu użytkownika (okien dialogowych itp.)
 Qt Linguist – aplikacja wspomagająca tłumaczenie programu na różne języki
 Qt Assistant – aplikacja zawierająca rozbudowany system pomocy dla programistów
 Qt Creator – zintegrowane środowisko programistyczne

Historia 
Pomysłodawcami i pierwszymi twórcami Qt byli Haavard Nord i Eirik Chambe-Eng. Projektowanie pierwszych klas biblioteki rozpoczęto w 1991 r. Rok później Chambe-Eng opracował koncepcję mechanizmu sygnałów i gniazd, który wkrótce stał się fundamentem biblioteki.

4 marca 1994 r. Nord i Chambe-Eng założyli firmę Quasar Technologies. W późniejszych latach zmieniała ona nazwy kolejno na Troll Tech, Trolltech, Qt Software i Qt Development Frameworks. Inspiracją dla nazwy Qt była nazwa biblioteki Xt (X Toolkit), w której literę X zastąpiono literą Q (zdaniem twórców Qt, litera Q wyglądała najładniej jako przedrostek nazw klas w edytorze Emacs).

W 1995 firma otrzymała pierwszy kontrakt i zatrudniła pierwszego programistę. 20 maja 1995 na serwerze sunsite.unc.edu pojawiło się pierwsze oficjalne wydanie Qt – Qt 0.90. Mogło być ono używane do tworzenia aplikacji dla systemów Unix i Windows na dwóch licencjach: komercyjnej (Windows, Linux) i wolnej (Linux). Do końca 1996 sprzedano łącznie 18 licencji dla 8 różnych firm.

W 1997 twórcy KDE postanowili oprzeć swój produkt na bibliotece Qt. Dzięki temu szybko osiągnęła ona status jednej z najpopularniejszych bibliotek dla aplikacji okienkowych w C++ dla systemu Linux. Sukces ten stał się jednocześnie przyczyną obaw wielu zwolenników wolnego oprogramowania przed konsekwencjami rozpowszechnienia w środowisku systemu Linux programów opartych na własnościowej bibliotece nie podlegającej licencji GPL. Doprowadziło to do zainicjowania dwóch projektów alternatywnych dla Qt: Harmony i GNOME. Celem pierwszego z nich było stworzenie ekwiwalentu Qt podlegającego licencji GPL, celem drugiego – stworzenie realnej alternatywy dla KDE opartej wyłącznie na wolnym oprogramowaniu. Projekt Harmony został wstrzymany w 2000 r. wraz z udostępnieniem na licencji GPL środowiska Qt dla systemu Linux.

W 2000 Trolltech opublikował wersję Qt dla urządzeń wbudowanych – Qt/Embedded (przemianowaną później na Qtopia Core i Qt Extended).

W 2001, wraz z opublikowaniem Qt 3.0, rozszerzono zakres platform systemowych obsługiwanych przez Qt o Mac OS X.

W 2005, wraz z opublikowaniem Qt 4.0, po raz pierwszy udostępniono wersję Qt dla wszystkich obsługiwanych systemów operacyjnych (w tym Windows) na licencji GPL. Dopiero ta decyzja wygasiła w środowisku wolnego oprogramowania próby stworzenia rozwiązań alternatywnych do Qt pod względem polityki licencyjnej (jednym z ostatnich poważnych projektów tego typu był Q... Windows).

W 2007 udostępniono wersję Qt dla języka Java (Qt Jambi).

W 2008 Trolltech został przejęty przez Nokię i zmienił nazwę na Qt Software, a od sierpnia 2009 na Qt Development Frameworks. W styczniu 2009 złagodzono politykę licencyjną (stosowana od wersji Qt 4.5 opcjonalna licencja LGPL praktycznie czyni z Qt bibliotekę darmową dla większości zastosowań komercyjnych).
W tym samym roku całkowicie wstrzymano rozwój Qt Jambi oraz zaprzestano rozwoju Qt Extended jako osobnej platformy, włączając część jej funkcji do głównej gałęzi Qt.

W 2010 Nokia zapowiedziała użycie Qt jako głównej platformy programistycznej w nadchodzącym Symbianie^4 oraz systemie MeeGo. Wydano testowe wersje API do urządzeń mobilnych – Qt Mobility (zastępujące Qt Extended).

W 2012 Digia kupiła od firmy Nokia framework Qt, zapewniając przy okazji dalsze wsparcie i rozwój darmowej licencji i współpracę z projektem KDE oraz KDE Free Qt Foundation na rzecz otwartego i wolnego oprogramowania.

Główne wydania biblioteki 

 Qt 1.0 – 24 września 1996
 Qt 2.0 – czerwiec 1999
 Qt 3.0 – 2001
 Qt 4.0 – 28 czerwca 2005
 Qt 5.0 – 19 grudnia 2012

Qt 4 
Qt w wersji 4 jest niekompatybilna z poprzednimi wersjami Qt – zarówno na poziomie kodów źródłowych, jak i kodów wykonywalnych. W porównaniu z wersją Qt 3, wprowadzono do niej sześć nowych technologii:
 Tulip – Zestaw szablonów klas kontenerów (m.in. QList, QLinkedList, QVector, QStack, QQueue, QMap, QMultiMap, QHash, QMultiHash i QSet).
 Interview – Zestaw klas ułatwiających pisanie kodu zgodnie ze wzorcem model-widok-kontroler.
 Arthur – Zestaw klas do grafiki dwuwymiarowej.
 Scribe – Zestaw klas do pozycjonowania i wyświetlania tekstu.
 MainWindow – Zestaw klas zawierających elementy niezbędne do tworzenia nowoczesnych okien głównych aplikacji (w tym aplikacji typu MDI) z menu, paskami narzędziowymi, skrótami klawiaturowymi, paskiem stanu itp.
 Zupełnie nowa architektura programu Qt Designer.

Wersje Qt 4 
 Qt 4.1 (19 grudnia 2005). Wprowadzono m.in. obsługę formatów SVG (rysunki i animacje) i PDF (drukowanie) oraz umożliwiono stosowanie półprzezroczystych okien potomnych na wszystkich platformach.
 Qt 4.2 (4 października 2006). Wprowadzono m.in. moduł Graphics View (definiujący scenę, na której można efektywnie wyświetlać i manipulować tysiącami własnych obiektów graficznych), umożliwiono kontrolowanie wyglądu widgetów przy pomocy arkuszy stylów (wzorowanych na CSS), wprowadzono ułatwienia przy implementacji operacji undo („cofnij”) i uzupełniania kodu (code completion).
 Qt 4.3 (30 maja 2007). Zwiększono zgodność z systemem Vista, ulepszono obsługę standardów OpenGL (uwzględnienie nowych możliwości nowoczesnych kart graficznych) i SVG, włączono moduł QtScript obsługujący język skryptowy zgodny ze standardem ECMAScript, wprowadzono obsługę protokołów SSL i HTTPS.
 Qt 4.4 (6 maja 2008). Integracja z silnikiem WebKit (przeglądarka WWW), integracja z biblioteką Phonon (multimedia), obsługa platformy Windows CE, obsługa standardu XQuery 1.0 i XPath 2.0 (język XML), nowy, uproszczony moduł dla aplikacji wielowątkowych, zmodyfikowany system pomocy, integracja standardowych widżetów z modułem Graphics View.
 Qt 4.5 (3 marca 2009). Zwiększona wydajność biblioteki, obsługa programów hybrydowych (łączenie aplikacji webowych z kodem natywnym), obsługa 64-bitowej platformy Mac. Do standardowej dystrybucji włączono wieloplatformowe zintegrowane środowisko programistyczne Qt Creator. Udostępniono Qt SDK zawierający pełną wersję biblioteki wraz z wszystkimi narzędziami deweloperskimi
 Qt 4.6 (1 grudnia 2009). Nowe API: animacje, gesty, wielodotyk; wstępne wsparcie Symbiana, Windowsa 7 oraz Mac OS X 10.6; poprawki wydajności.
 Qt 4.7 (21 września 2010). Qt Quick – platforma tworzenia UI.
 Qt 4.8 (15 grudnia 2011). Qt Platform Abstraction (warstwa ułatwiająca przenoszenie aplikacji na różne platformy) wsparcie dla wielowątkowego wykorzystania biblioteki OpenGL oraz dostępu HTTP, optymalizacja systemu dostępu do plików.

Qt 5 

Jest ona w znacznym stopniu zgodna z Qt 4 na poziomie kodu źródłowego, ale niezgodna na poziomie kodów wykonywalnych, więc oprogramowanie wymaga ponownej kompilacji.

Licencje 
Od wersji 4.5 na wszystkich platformach dostępne są trzy rodzaje licencji:
 LGPL 2.1 (Czerwiec 2020r LGPLv3)
 GPL 3.0
 komercyjna (dostępna w firmie Digia)

Wykorzystanie Qt 
W 2017 roku firma Qt Development Frameworks oszacowała społeczność około 1 miliona programistów działająca na całym świecie w 70 branżach.

Organizacje wykorzystujące Qt:

 AMD
 BMW
 Crytek
 LG
 Microsoft
 Samsung
 Siemens
 Tesla
 Volvo
 Valve

Zobacz też 
 GTK+
 Ultimate++

Przypisy

Linki zewnętrzne 

  
 Szczegółowa dokumentacja 
 Strona społeczności i forum dyskusyjne 
 Kurs QT na WikiBooks 
 Alan Ezust, Paul Ezust, An Introduction to Design Patterns in C++ with Qt4 . Wydawnictwo Prentice Hall, 2008, , wersja Open Source.

Biblioteki graficzne
Oprogramowanie na licencji GNU GPL
Oprogramowanie na licencji GNU LGPL
Nokia
C++
Java
Frameworki