Opracowany przez | |
---|---|
Pierwsza wersja | 1995 |
Ostatnia wersja | 6,1 (6 maja 2021) |
Kaucja | kod.qt.io/cgit/qt/qtbase.git |
Stan projektu | Aktywny |
Napisane w | C++ |
System operacyjny | GNU / Linux , Microsoft Windows , macOS , BSD ( d ) , Android i iOS |
Środowisko | GNU / Linux , Windows , Windows CE , Mac OS X , BSD , Unix , Symbian OS , Maemo , Tizen , Genode |
Rodzaj | tworzenie interfejsów graficznych |
Licencja | GNU GPL v2, GNU LGPL 3 z Qt 5.7 |
Dokumentacja | doc.qt.io |
Stronie internetowej | www.qt.io |
Qt (oficjalnie wymawiane w języku angielskim słodkie ( / kjuːt / ), ale powszechnie wymawiane QT ( /kjuː.tiː/ )):
Qt umożliwia przenoszenie aplikacji, które używają tylko jego komponentów, po prostu rekompilując kod źródłowy. Obsługiwane środowiska to Unix (w tym GNU/Linux ), które używają systemu graficznego X Window System lub Wayland , Windows , Mac OS X , Tizen, a także Genode . Fakt bycia wieloplatformową biblioteką oprogramowania przyciąga dużą liczbę osób, które w związku z tym mają możliwość nadawania swoich programów w głównym istniejącym systemie operacyjnym.
Qt integruje powiązania z więcej niż dziesięcioma językami innymi niż C++, takimi jak Ada, C#, Java, Python, Ruby, Visual Basic itp.
Qt jest znane przede wszystkim z tego, że jest frameworkiem, na którym oparte jest środowisko graficzne KDE Plasma , jedno z domyślnych środowisk graficznych dla kilku dystrybucji GNU/Linuksa .
Jest na Norweskim Instytucie Technologii w Trondheim że Haavard Nord ( CEO od Trolltech ) i Eryk chambe-Eng (prezes Trolltech ) spełniają. W 1988 r. Haavard Nord otrzymał od szwedzkiej firmy zlecenie na opracowanie biblioteki oprogramowania w C++ do zarządzania interfejsem graficznym , po raz pierwszy zaczął poruszać ten temat. Dwa lata później wraz z Chambe-Eng opracowują aplikację wieloplatformową ( Unix , Macintosh i Windows ) i poważnie zaczynają myśleć o zaprojektowaniu ogólnej wieloplatformowej biblioteki graficznej.
W 1991 roku rozpoczęli rozbudowę tej biblioteki. W następnym roku Chambe-Eng zaproponował zasadę „ sygnałów i szczelin ”, która stała się kamieniem węgielnym Qt. W 1993 r. rdzeń Qt był gotowy i umożliwił informatykom opracowywanie własnych komponentów graficznych. To właśnie pod koniec tego roku Haavard Nord proponuje utworzenie firmy, która będzie sprzedawać ich bibliotekę.
Quasar Technologies powstało w dniu4 marca 1994i przemianowany sześć miesięcy później na Troll Tech, następnie Trolltech, następnie Qt Software i wreszcie Qt Development Frameworks . Początki są szczególnie trudne finansowo. Ale mają szczęście, że są małżeństwem: wspierają ich żony.
Projekt został nazwany Qt, ponieważ znak Q wyglądał ładnie w skrypcie Emacs Haavarda , a t pochodzi z Xt Xtoolkit . Wszystko to jest wymawiane w języku angielskim cute , co oznacza „słodkie”. T jest małe, nie wymawia Cutie ( /kjuː.ti/ ): nie jest to skrót (QT).
To jest w Kwiecień 1995że Trolltech ma swojego pierwszego klienta, norweską firmę Metis. I od prawie roku nie ma innego, przez co firma jest bardzo krucha finansowo. Drugi klient, Europejska Agencja Kosmiczna (ESA), kupuje od niej dziesięć licencji wMarzec 1996.
26 maja 1995 r.Pierwsza publiczna wersja Qt została ogłoszona na grupie dyskusyjnej comp.os.linux.announce. A rok później wersja 0.97, potem24 września 1996 r. wersja 1.0 została wydana i ogłoszona kilka dni później.
W 1997 roku projekt KDE został uruchomiony przez Matthiasa Ettricha (zatrudnionego przez Trolltech w następnym roku). Ten ostatni podejmuje decyzję o użyciu Qt jako biblioteki podstawowej. Fakt, że projekt tej wielkości wykorzystuje Qt, będzie świetną reklamą dla Trolltecha i jego biblioteki. Od tego czasu więzi między Trolltechem a KDE tylko się zacieśniły .
Druga główna wersja Qt została wydana w Czerwiec 1999oraz wersja dla systemów wbudowanych , Qt/Embedded , odkąd znana jako Qtopia , została wydana w 2000 roku . Ta najnowsza wersja została zaprojektowana dla Linuksa i używa bezpośrednio swojego bufora ramki , bez przechodzenia przez system okien X11 (który nie jest odpowiedni dla systemów wbudowanych).
Pierwsze dwie główne wersje Qt są dostępne tylko dla X11 i Windows , wsparcie dla Mac OS X pochodzi z wersji 3.0, wydanej w 2001 roku . W porównaniu do wersji 2.0, ta nowa wersja zapewnia lepszą obsługę internacjonalizacji , Unicode i wyrażeń regularnych, jak w Perlu .
28 czerwca 2005, została wydana wersja 4 i znacznie poprawia silnik renderujący , teraz nazywany Arthur , separację między danymi i prezentacją oraz rozdziela bibliotekę na moduły:
Dodatkowo dla wersji komercyjnej pod Windows istnieją dwa inne moduły związane z wykorzystaniem ActiveX : QAxContainer i QAxServer .
Wraz z ewolucją Qt 4 zaprojektowano kolejne moduły:
28 stycznia 2008, Nokia wprowadza przyjazną przejęcia ofertę kupna Qt i Trolltech . Trolltech, przemianowany na Qt Software , staje się oddziałem Nokii. Dlatego Nokia podejmuje decyzję wstyczeń 2009 obniżyć jak najwięcej barier, aby ułatwić przyjęcie Qt, które od tego czasu jest wykorzystywane w ich wewnętrznych opracowaniach:
Nokia skupia się na Windowsie, poddaje się marzec 2011Usługi Qt i działalność zarządzania licencjami komercyjnymi dla Digia. 9 sierpnia 2012, całkowicie sceduje zarządzanie ramami Qt na firmę Digia za kwotę 4,9 mln € (w porównaniu do 150 mln w 2008 r.). Digia ogłasza, że chce rozszerzyć integrację Qt o systemy Android , iOS i Windows 8 .
Qt 5.0 został wydany w dniu 19 grudnia 2012. Mimo zaznaczenia dużych zmian w wielu punktach (ważna rola QML i JavaScript w tworzeniu interfejsów graficznych z Qt Quick, separacja na niezależne moduły w celu ułatwienia dostaw, warstwa abstrakcji ułatwiająca portowanie itp.), przejście na Qt5 co najmniej narusza kompatybilność na poziom źródłowy. W ten sposób przełączenie jest znacznie łatwiejsze niż w przypadku Qt4.
Wersje Qt 5.x używają wtyczek wymaganych do wdrażania programu.
Qt Quick to darmowy framework opracowany i utrzymywany przez firmę Digia jako część biblioteki Qt. Zapewnia możliwość tworzenia dostosowywalnych i dynamicznych interfejsów użytkownika z płynnymi efektami przejścia w sposób deklaratywny. Ten rodzaj dynamicznego interfejsu jest coraz bardziej powszechny, zwłaszcza na smartfonach. Qt Quick zawiera deklaratywny język skryptowy o nazwie QML porównywalny z XAML stworzonym przez Microsoft dla jego biblioteki WPF .
Qt Quick i QML są oficjalnie dostarczane od Qt 4.7 (z Qt Creator 2.1).
Projekt GUI KDE używał biblioteki Qt od samego początku, ale wraz z sukcesem tego środowiska, część społeczności wolnego oprogramowania skrytykowała licencję Qt za to, że jest zastrzeżona i niekompatybilna z GNU GPL używaną przez KDE . Problem ten rozwiązała firma Trolltech, która objęła GNU/Linux i UNIX wersję Qt na licencji GNU GPL, gdy opracowana aplikacja była również objęta licencją GNU GPL. Co do reszty, wchodzi w życie licencja komercyjna. Ta polityka podwójnej licencji była początkowo stosowana tylko dla GNU / Linux i UNIX, ale od wersji Qt 4.0 jest stosowana dla wszystkich systemów.
Utworzona w czerwcu 1998 roku Fundacja KDE Free Qt jest odpowiedzialna za zapewnienie dostępności Qt dla rozwoju wolnego oprogramowania. Zgodnie z umową z Trolltech , fundacja ta ma prawo do dystrybucji Qt na licencji w stylu BSD w przypadku, gdy Trolltech z różnych powodów przestanie rozwijać darmową wersję, w tym z powodu ogłoszenia upadłości . Przejęcie firmy Trolltech przez Nokia w dniu28 stycznia 2008nie kwestionuje polityki podwójnej licencji, fińska firma wspiera nawet KDE .
18 stycznia 2008, Trolltech informuje, że wersje 3 i 4 Qt są od tej daty na licencji GPLv2 i GPLv3. Ta zmiana wersji dotyczy tylko darmowych wersji Qt, dlatego wersja 3 Qt dla Windows, która nie jest wolna, nie zmienia swojej licencji. Ta zmiana jest częścią pragnienia KDE, aby przejść na wersję 3 GPL, oprócz wersji 2, która jest już używana.
Rok później 14 stycznia 2009, Trolltech ogłasza, że począwszy od Qt 4.5, Qt będzie również dostępne na licencji LGPL v2.1. Ta nowa licencja pozwala zatem na tworzenie oprogramowania własnościowego , bez konieczności zakupu licencji komercyjnej od Qt Development Frameworks. Ta zmiana, której celem była Nokia, aby zapewnić wykorzystanie Qt w jak największej liczbie projektów, jest możliwa dzięki temu, że Nokia radzi sobie bez sprzedaży licencji komercyjnych, w przeciwieństwie do Trolltecha, który nie mógł się obejść bez tego źródła dochodów.
Qt API składa się z klas o nazwach prefiksem przez Q i każde słowo, które zaczyna się wielką literą (np :)QLineEdit , jest to sprawa wielbłąd typografia . Te klasy często mają wyliczone typy zadeklarowane w przestrzeni nazw jako ich atrybuty Qt. Poza czysto obiektową architekturą, niektóre podstawowe funkcjonalności są implementowane przez makra (ciąg znaków do tłumaczenia za pomocą tr, wyświetlanie na standardowym wyjściu za pomocą qDebug…).
Konwencje nazewnictwa metod są bardzo podobne do tych w Javie: używa się małej litery wielbłąda , tzn. wszystkie słowa z wyjątkiem pierwszego są pisane wielką literą (np.:) indicatorFollowsStyle(), modyfikatory są poprzedzone set, natomiast akcesory po prostu przyjmują nazwę atrybut (np.:) text()lub zacznij od isw przypadku wartości logicznych (np isChecked(). :) .
Obiekty Qt (te dziedziczące po QObject) mogą organizować się w drzewo . Tak więc, gdy tworzona jest instancja klasy, możemy zdefiniować dla niej obiekt nadrzędny. Taka organizacja obiektów w formie drzewa ułatwia zarządzanie pamięcią, ponieważ zanim obiekt nadrzędny zostanie zniszczony, Qt rekurencyjnie wywołuje destruktor wszystkich dzieci.
To pojęcie o drzewie obiektów ułatwia również do debugowania, przez wywoływanie metod, jak QObject::dumpObjectTree()i Object::dumpObjectInfo().
MOC (dla Meta Object Compiler ) jest preprocesor , który stosowany przed kompilacją kodu źródłowego programu Qt, generuje meta-informacje odnoszące się do klas używanych w programie. Ta metainformacja jest następnie wykorzystywana przez Qt do dostarczania funkcji niedostępnych w C++, takich jak sygnały i szczeliny oraz introspekcja .
Zastosowanie takiego dodatkowego narzędzia odróżnia programy Qt od standardowego języka C++. Ta operacja jest postrzegana przez Qt Development Frameworks jako niezbędny kompromis zapewniający mechanizmy introspekcji i sygnalizacji. Kiedy wydano Qt 1.x, implementacje szablonów przez kompilatory C++ nie były wystarczająco spójne.
Sygnały i szczeliny są implementacją wzorca projektowego obserwatora . Pomysł polega na łączeniu obiektów ze sobą za pomocą sygnałów, które są przesyłane i odbierane przez szczeliny. Z punktu widzenia dewelopera sygnały są reprezentowane jako proste metody klasy wysyłającej, której nie ma implementacji. Te „metody” będą dalej nazywane przez poprzedzający „emit”, który oznacza emisję sygnału. Ze swej strony szczelina podłączona do sygnału jest metodą klasy odbiorczej, która musi mieć taką samą sygnaturę (innymi słowy te same parametry co sygnał, do którego jest dołączona), ale w przeciwieństwie do sygnałów musi być zaimplementowana. przez dewelopera. Kod tej implementacji reprezentuje czynności, które należy wykonać po odebraniu sygnału.
MOC odpowiada za wygenerowanie kodu C++ niezbędnego do połączenia sygnałów i slotów.
Qt Designer to oprogramowanie umożliwiające tworzenie graficznych interfejsów Qt w przyjaznym dla użytkownika środowisku. Użytkownik, przeciągając i upuszczając , umieszcza komponenty GUI i łatwo ustawia tam ich właściwości. Pliki GUI są sformatowane w XML i mają rozszerzenie .ui .
Podczas kompilacji plik GUI jest konwertowany do klasy C++ przez narzędzie uic. Deweloper może użyć tej klasy na kilka sposobów:
Qt chcąc być przenośnym środowiskiem programistycznym i mając MOC jako etap pośredni przed fazą kompilacji / linkowania , konieczne było zaprojektowanie konkretnego silnika produkcyjnego . Tak zaprojektowany jest program qmake.
Ten ostatni pobiera jako dane wejściowe plik (z rozszerzeniem .pro) opisujący projekt (lista plików źródłowych, zależności, parametry przekazywane do kompilatora itp.) i generuje plik projektu specyficzny dla platformy. Tak więc w systemach UNIX qmake tworzy plik Makefile, który zawiera listę poleceń do wykonania w celu wygenerowania pliku wykonywalnego, z wyjątkiem kroków specyficznych dla Qt (generowanie klas C++ przy projektowaniu interfejsu graficznego za pomocą Qt Designer, generowanie C ++ kod do łączenia sygnałów i gniazd, dodawania pliku do projektu itp.).
Plik projektu jest bardzo łatwy do edycji przez programistę. Składa się z szeregu przypisań zmiennych. Oto przykład małego projektu:
TARGET = monAppli SOURCES = main.cpp mainwindow.cpp HEADERS = mainwindow.h FORMS = mainwindow.ui QT += sqlDeklaracje te wymagają, aby plik wykonywalny miał nazwę myAppli , podawał listę plików źródłowych, nagłówków i plików GUI. Ostatnia linia deklaruje, że projekt wymaga modułu Qt SQL .
Qt integruje własny system tłumaczeń, który zasadniczo nie różni się zasadniczo od biblioteki gettext . Według podręcznika Qt Linguist, internacjonalizację osiąga się dzięki współpracy trzech rodzajów osób: programistów , kierownika projektu i tłumaczy .
W swoim kodzie źródłowym programiści wprowadzają ciągi w swoim własnym języku. Muszą umożliwiać tłumaczenie tych ciągów dzięki metodzie tr(). Jeśli istnieje jakakolwiek niejasność co do znaczenia wyrażenia, mogą również wskazać komentarze, które mają pomóc tłumaczom.
Kierownik projektu deklaruje pliki tłumaczeń (po jednym dla każdego języka) w pliku projektu. Narzędzie lupdateskanuje źródła w poszukiwaniu ciągów do przetłumaczenia i synchronizuje pliki tłumaczeń ze źródłami. Pliki tłumaczeń to pliki XML z rozszerzeniem .ts .
Tłumacze używają Qt Linguist do wypełniania plików tłumaczeniowych. Po zakończeniu tłumaczeń kierownik projektu może skompilować pliki .ts za pomocą narzędzia, lreleasektóre generuje pliki binarne z rozszerzeniem .qm , z których może korzystać program. Pliki te są odczytywane w czasie wykonywania, a znalezione w nich ciągi zastępują te napisane przez programistów.
Biblioteka zawiera różne motywy widżetów, co zapewnia dobrą integrację wizualną na wszystkich platformach. W środowiskach graficznych GNOME , Mac OS X i Windows aplikacje Qt mają więc wygląd aplikacji natywnych.
Qt pozwala dostosować wygląd różnych komponentów GUI przy użyciu zasady kaskadowych arkuszy stylów (CSS).
Qt Development Frameworks dostarcza zestaw darmowego oprogramowania ułatwiającego tworzenie aplikacji Qt:
Mimo że Qt Creator jest reklamowany jako wzorcowe środowisko programistyczne dla Qt, istnieją moduły Qt dla środowisk programistycznych Eclipse i Visual Studio . Istnieją inne IDE przeznaczone dla Qt i opracowane niezależnie od Nokii, takie jak QDevelop i Monkey Studio .
Niektóre powiązania istnieją w celu używania Qt z innymi językami niż C++. W ten sposób można używać języków Ada , C # i Visual Basic ( Qt # ), D , F # ( Qt # ), Java ( Qt Jambi ), OCaml , Perl , PHP , Python , Ruby ( QtRuby ), Scheme .
Coraz więcej programistów korzysta z Qt, także wśród dużych firm. Należą do nich: Google , Adobe Systems , Skype czy nawet NASA . Witryna firmy Digia zawiera listę firm korzystających z aplikacji opartych na Qt i Qt.
Klasyczne " Hello World " w różnych językach: C++ , Java (z QtJambi ), Python (z PyQt i PySide ) oraz C# (z Qyoto ):
Przestudiujmy te linie.
#include <QApplication> : Zawiera nagłówek QApplicationniezbędny do korzystania z klasy QApplication.
#include <QPushButton>: To samo, ale dla klasy QPushButton.
int main(int argc, char *argv[]) { : Początek funkcji mainwykonywanej podczas uruchamiania programu.
QApplication app(argc, argv); : Utwórz obiekt QApplication, ten krok jest obowiązkowy przed użyciem widżetów ( QWidget).
QPushButton bouton("Hello world!"); : Utwórz obiekt QPushButton(który jest jednym QWidget). Obiekt ten wizualizowany jest za pomocą przycisku wyświetlającego tekst "Hello world!".
bouton.show(); : Wywołuje funkcję showobiektu, boutonaby był widoczny (domyślnie przycisk jest niewidoczny).
return app.exec(); : Wywołuje funkcję execz app, i zwraca jego wynik. Ta funkcja działa, dopóki użytkownik nie zamknie wszystkich widocznych okien, w tym przypadku, dopóki użytkownik nie zamknie odpowiedniego okna bouton.