Qt (oprogramowanie)

Qt
Oryginalni autorzy Haavard Nord i Eirik Chambe-Eng
Deweloperzy
Pierwsze wydanie 20 maja 1995 ; 27 lat temu ( 1995-05-20 )
Wersja stabilna
Edit this on Wikidata 6.4.2 / 5 stycznia 2023 r . ; 57 dni temu ( 5 stycznia 2023 )
Magazyn
Napisane w C++ ( C++17 )
System operacyjny Android , iOS , Linux ( wbudowany , Wayland , X11 ), macOS , Microsoft Windows , WebAssembly , ...
Platforma Międzyplatformowe
Typ Oprogramowanie wieloplatformowe i narzędzia programistyczne
Licencja
Strona internetowa www.qt.io _ _

Qt (wymawiane jako „słodkie”) to wieloplatformowe oprogramowanie do tworzenia graficznych interfejsów użytkownika, a także wieloplatformowe aplikacje działające na różnych platformach programowych i sprzętowych, takich jak Linux , Windows , macOS , Android lub systemy wbudowane , z niewielkimi lub żadnymi zmianami w podstawowej bazy kodu, będąc jednocześnie natywną aplikacją z natywnymi możliwościami i szybkością.

Qt jest obecnie rozwijany przez The Qt Company , spółkę notowaną na giełdzie, oraz Qt Project w ramach zarządzania open source , z udziałem indywidualnych programistów i organizacji pracujących nad rozwojem Qt. Qt jest dostępny zarówno na licencjach komercyjnych, jak i open-source GPL 2.0, GPL 3.0 i LGPL 3.0.

Cele i zdolności

Qt służy do tworzenia graficznych interfejsów użytkownika (GUI) i aplikacji wieloplatformowych , które działają na wszystkich głównych platformach stacjonarnych i większości platform mobilnych lub wbudowanych. Większość programów GUI utworzonych za pomocą Qt ma natywny interfejs, w którym to przypadku Qt jest klasyfikowany jako zestaw narzędzi widżetów . Można również opracowywać programy inne niż GUI, takie jak wiersza poleceń i konsole dla serwerów. Przykładem takiego programu bez GUI używającego Qt jest framework sieciowy Cutelyst .

Qt obsługuje różne kompilatory, w tym kompilator GCC C++, pakiet Visual Studio , PHP za pośrednictwem rozszerzenia dla PHP5 i ma szerokie wsparcie internacjonalizacji . Qt zapewnia również Qt Quick , który zawiera deklaratywny język skryptowy o nazwie QML , który umożliwia użycie JavaScript w celu zapewnienia logiki. Dzięki Qt Quick możliwe stało się szybkie tworzenie aplikacji na urządzenia mobilne, podczas gdy logikę można nadal pisać za pomocą kodu natywnego, aby osiągnąć najlepszą możliwą wydajność.

Inne funkcje obejmują dostęp do bazy danych SQL , parsowanie XML , parsowanie JSON , zarządzanie wątkami i obsługę sieci.

Wydania Qt

Najnowsza wersja Qt to 6.4.

Również nadal obsługiwane dla użytkowników komercyjnych są 5.15 LTS, wydane 26 maja 2020 r., Oraz 6.2 LTS, wydane 30 września 2021 r. - wersje z długoterminowym wsparciem (LTS) są generalnie obsługiwane przez trzy lata, z licencją komercyjną, podczas gdy 5.15 wsparcie zostało przedłużone do pięciu lat, więc jest wspierane dłużej lub do 26 maja 2025. Ponadto projekt KDE zapewnia nieoficjalne wsparcie przynajmniej dla Qt 5.15, czyli nie tylko dla użytkowników komercyjnych.

Qt w użyciu

W 2017 roku Qt Company oszacowała społeczność około 1 miliona programistów na całym świecie w ponad 70 branżach.

Interfejsy użytkownika na komputery stacjonarne

Maskotka KDE Konqi pokazująca swoje serce Qt

Graficzne interfejsy użytkownika i środowiska graficzne wykorzystujące Qt/QML jako zestaw narzędzi widgetów:

Wbudowane i mobilne interfejsy użytkownika

  • Aktywnie rozwijane lub utrzymywane
    • AsteroidOS , system operacyjny typu open source przeznaczony dla smartwatchy
    • Awionika, system rozrywki pokładowej firmy Panasonic
    • Blackberry 10 , mobilny system operacyjny z ekranem dotykowym firmy Blackberry Ltd.
    • Sailfish OS , mobilny system operacyjny opracowany przez firmę Jolla
    • Plasma Mobile , dotykowy GUI opracowany przez KDE
    • LuneOS , kierowany przez społeczność następca systemu Palm/HP webOS
    • Nemo Mobile , oparty na Mer
    • Lomiri , wcześniej znany jako Unity8, interfejs telefonu opracowany przez Ubports, pierwotnie przez Canonical
    • Interfejs samochodowy Tesli Model S
    • webOS , wielozadaniowy system operacyjny firmy LG dla inteligentnych urządzeń, takich jak telewizory i smartwatche
    • Sky Q, system domowej rozrywki firmy Sky plc
  • Dostępne, ale nieaktywne
    • UX telefonu i tabletu MeeGo
    • Qtopia , system firmy Nokia dla urządzeń wbudowanych i mobilnych

Aplikacje korzystające z Qt

Wiele godnych uwagi programów typu open source lub zastrzeżonych programów wieloplatformowych używa Qt lub QML :

Organizacje korzystające z Qt

Qt jest używany przez wiele firm i organizacji, takich jak

Architektura oprogramowania Qt

Przykład użycia Qt w systemach opartych na Linuksie

Koncepcje Qt

Qt opiera się na następujących kluczowych koncepcjach:

Kompletna abstrakcja GUI
Kiedy po raz pierwszy został wydany, Qt używał własnego silnika malowania i kontrolek, emulując wygląd różnych platform, na których działa, kiedy rysował swoje widżety. Ułatwiło to przenoszenie, ponieważ bardzo niewiele klas w Qt naprawdę zależało od platformy docelowej; jednak czasami prowadziło to do niewielkich rozbieżności, w których ta emulacja była niedoskonała. Najnowsze wersje Qt używają natywnych interfejsów API różnych platform, na platformach, które mają natywny zestaw widżetów, do wyszukiwania metryk i rysowania większości kontrolek, i nie cierpią z powodu takich problemów tak często. Na niektórych platformach (takich jak MeeGo i KDE) Qt jest natywny interfejs API. Niektóre inne przenośne zestawy narzędzi graficznych podjęły inne decyzje projektowe; na przykład wxWidgets wykorzystuje zestawy narzędzi platformy docelowej do swoich implementacji.
Sygnały i gniazda
Konstrukcja językowa wprowadzona w Qt do komunikacji między obiektami, która ułatwia implementację wzorca obserwatora przy jednoczesnym uniknięciu szablonowego kodu . Koncepcja polega na tym, że widżety GUI mogą wysyłać sygnały zawierające informacje o zdarzeniach, które mogą być odbierane przez inne kontrolki za pomocą specjalnych funkcji zwanych szczelinami.
Metaobiekt kompilator Kompilator
metaobiektów , nazwany moc , jest narzędziem uruchamianym na źródłach programu Qt . Interpretuje niektóre makra z kodu C++ jako adnotacje i używa ich do generowania dodanego kodu C++ z metainformacjami o klasach używanych w programie. Te metainformacje są używane przez Qt w celu zapewnienia funkcji programistycznych niedostępnych natywnie w C++: sygnałów i gniazd, introspekcji i asynchronicznych wywołań funkcji.
Powiązania językowe
Qt mogą być używane w kilku językach programowania inne niż C++, takie jak Python, Javascript, C# i Rust za pośrednictwem powiązań językowych ; wiele języków ma powiązania dla Qt 5 i powiązania dla Qt 4 .

Moduły Qt

Począwszy od Qt 4.0, framework został podzielony na poszczególne moduły. W Qt 5.0 architektura została jeszcze bardziej zmodularyzowana. Qt jest teraz podzielony na podstawowe i dodatkowe moduły.

Podstawowe informacje o Qt

Moduł Opis
rdzeń Qt Jedyny wymagany moduł Qt, zawierający klasy używane przez inne moduły, w tym system metaobiektów, współbieżność i wątki, kontenery, system zdarzeń, wtyczki i udogodnienia I/O.
GUI Qt Centralny moduł GUI. W Qt 5 ten moduł jest teraz zależny od OpenGL , ale nie zawiera już żadnych klas widżetów.
Widżety Qt Zawiera klasy dla klasycznych aplikacji GUI opartych na widgetach oraz klasy QSceneGraph. Został wydzielony z QtGui w Qt 5.
QtQML Moduł dla języków QML i JavaScript .
Qt Szybki Moduł aplikacji GUI napisanej przy użyciu QML2.
Szybkie sterowanie Qt Widżetowe kontrolki dla Qt Quick przeznaczone głównie do aplikacji desktopowych.
Szybkie układy Qt Układy do układania elementów w Qt Quick .
Sieć Qt Warstwa abstrakcji sieci. W komplecie z obsługą TCP , UDP , HTTP , TLS , SSL (w Qt 4) i SPDY (od Qt 5.3).
Qt Multimedia Zajęcia z funkcjonalności audio, wideo, radia i kamery.
Widżety multimedialne Qt Widżety z Qt Multimedia .
Qt SQL Zawiera klasy do integracji z bazą danych przy użyciu SQL .
Qt WebEngine Nowy zestaw interfejsów API Qt Widget i QML webview oparty na Chromium .
Test Qt Zajęcia do testów jednostkowych aplikacji i bibliotek Qt.

Dodatki Qt

Moduł Opis
Aktywny Qt Klasy dla aplikacji korzystających z ActiveX .
Wykresy Qt Zapewnia funkcjonalność i widżety do kreślenia wykresów różnego rodzaju
Qt Bluetooth Klasy uzyskujące dostęp do sprzętu Bluetooth .
Qt D-Bus Zajęcia dla IPC z wykorzystaniem protokołu D-Bus .
Qt NFC Klasy uzyskujące dostęp do sprzętu NFC . Jak dotąd tylko oficjalnie obsługiwane na sprzęcie BlackBerry (lub N9 w porcie MeeGo).
Qt OpenGL Legacy moduł zawierający klasy OpenGL z Qt 4. W Qt 5 zalecana jest podobna funkcjonalność w Qt GUI .
Lokalizacja firmy Qt Zajęcia dotyczące uzyskiwania dostępu do GPS i innych usług lokalizacyjnych oraz tworzenia map i nawigacji. Oddzielone od modułu Qt 4 Mobility w Qt Location . Obsługiwane w systemach Android, BlackBerry, iOS, Linux (przy użyciu GeoClue), Windows i Sailfish OS.
Qt Szybkie 3D Klasy do renderowania modeli 3D , gier wideo , symulacji i interfejsów użytkownika 3D , z API Qt QML , do mieszanego wykresu sceny 2D i 3D .
Skrypt Qt Starszy moduł do skryptowania aplikacji Qt przy użyciu ECMAScript/ JavaScript . W Qt 5 zalecane jest używanie podobnych klas w Qt QML .
Czujniki Qt Klasy umożliwiające dostęp do różnych mobilnych czujników sprzętowych. Kiedyś był częścią Qt Mobile w Qt 4. Obsługiwany na Androidzie, BlackBerry, iOS, WinRT, Mer i Linux.
Port szeregowy Qt Klasy dostępu do sprzętu i wirtualnych portów szeregowych. Obsługiwane w systemach Windows, Linux i macOS.
Qt WebChannel Zapewnia dostęp do obiektów Qt do HTML/Js przez WebSockets .
Qt WebKit Implementacja i API Qt w WebKit .
Widżety Qt WebKit Interfejs API widgetów dla Qt WebKit
Qt WebSockets Zapewnia implementację protokołu WebSocket .
Qt XML Starszy moduł zawierający klasy dla interfejsów API XML w stylu SAX i DOM . Zastąpione klasami QXmlStreamReader i QXmlStreamWriter w Qt Core .
Wzorce Qt XML Obsługa walidacji XPath , XQuery , XSLT i XML Schema .

Wydania

Dostępne są cztery edycje Qt: Community , Indie Mobile , Professional i Enterprise . Wersja Community jest objęta licencjami open source, natomiast wersje Indie Mobile, Professional i Enterprise, które zawierają dodatkowe funkcje i biblioteki, np. Enterprise Controls, są sprzedawane komercyjnie przez The Qt Company.

Obsługiwane platformy

Qt działa na wielu różnych platformach; następujące są oficjalnie obsługiwane:

Platforma Opis
Linux/Unix
X11 Qt dla systemu X Window ( Linux ); FreeBSD , NetBSD , OpenBSD i DragonFly BSD mają wsparcie społeczności.
Waylanda Aplikacje Qt mogą przełączać się między graficznymi backendami, takimi jak X i Wayland w czasie ładowania, za pomocą opcji wiersza poleceń -platform. Pozwala to na bezproblemowe przejście aplikacji Qt z X11 na Wayland. SailfishOS używa Wayland tylko dlatego, że nie ma X11.
Android Qt dla Androida (wcześniej znany jako Necessitas).
Wbudowany Linuks Qt dla platform wbudowanych: osobisty asystent cyfrowy , smartfon itp. Istnieje wiele platform w zależności od technologii wyświetlania. DirectFB , LinuxFB i EGLFS ( pełny ekran EGL ).
Platformy Microsoftu
Okna Qt dla Microsoft Windows 7 , 8 i 10
WindowsRT Obsługa aplikacji Windows 10 Mobile opartych na WinRT i Windows 10 IoT
Platformy Apple'a
System operacyjny Mac Qt dla Apple macOS ; obsługuje aplikacje na Cocoa
iOS Qt dla platform iOS ( iPhone , iPad )
Inne platformy wbudowane
Uczciwość Qt dla integralności
QNX Qt dla QNX
VxWorks Qt dla VxWorks . Dostępne tylko na zastrzeżonej (komercyjnej). Qt 5.5.

Po tym, jak Nokia otworzyła kod źródłowy Qt dla społeczności na Gitorious , pojawiły się różne porty. Istnieją również porty Qt, które mogą być dostępne, ale nie są już obsługiwane. Te platformy są wymienione na liście platform obsługiwanych przez Qt . Zobacz także aktualne wsparcie społeczności dla innych mniej znanych platform, takich jak SailfishOS .

Koncesjonowanie

Qt jest dostępny na następujących licencjach wolnego oprogramowania: GPL 2.0 , GPL 3.0 , LGPL 3.0 i LGPL 2.1 (ze specjalnym wyjątkiem Qt). Należy pamiętać, że niektóre moduły są dostępne tylko na licencji GPL, co oznacza, że ​​aplikacje, które łączą się z tymi modułami, muszą być zgodne z tą licencją.

Ponadto Qt zawsze był dostępny na licencji komercyjnej, takiej jak Qt Commercial License, która umożliwia tworzenie zastrzeżonych aplikacji bez ograniczeń licencyjnych.

Narzędzia Qt

Qt jest dostarczany z własnym zestawem narzędzi ułatwiających programowanie na różnych platformach, co w przeciwnym razie może być uciążliwe ze względu na inny zestaw narzędzi programistycznych.

Qt Creator to wieloplatformowe IDE dla C++ i QML. Funkcjonalność układu/projektowania GUI Qt Designer jest zintegrowana z IDE, chociaż Qt Designer nadal może być uruchamiany jako samodzielne narzędzie.

Oprócz Qt Creator, Qt zapewnia qmake , wieloplatformowe narzędzie do generowania skryptów kompilacji , które automatyzuje generowanie Makefile dla projektów rozwojowych na różnych platformach. W Qt dostępne są inne narzędzia, w tym konstruktor interfejsu Qt Designer i przeglądarka pomocy Qt Assistant (które są wbudowane w Qt Creator), narzędzie do tłumaczenia Qt Linguist, uic (kompilator interfejsu użytkownika) i moc (kompilator meta-obiektów ).

Historia Qt

Wczesne zmiany

Latem 1990 roku Haavard Nord i Eirik Chambe-Eng (pierwotni twórcy Qt oraz odpowiednio dyrektor generalny i prezes Trolltech ) pracowali razem nad aplikacją bazy danych dla obrazów ultrasonograficznych napisaną w C++ i działającą w systemach Mac OS , Unix i Microsoft Windows . Rozpoczęli rozwój „Qt” w 1991 roku, trzy lata przed zarejestrowaniem firmy jako Quasar Technologies, a następnie zmienili nazwę na Troll Tech, a następnie na Trolltech.

Zestaw narzędzi został nazwany Qt, ponieważ litera Q wyglądała atrakcyjnie w kroju Haavarda Emacsa , a „t” zostało zainspirowane Xt , zestawem narzędzi X.

Pierwsze dwie wersje Qt miały tylko dwa warianty: Qt/X11 dla systemu Unix i Qt/Windows dla systemu Windows.

20 maja 1995 r. Troll Tech publicznie udostępnił Qt 0.90 dla X11/Linux z kodem źródłowym na licencji Qt Free Edition . Ta licencja została uznana za niezgodną z definicją wolnego oprogramowania przez Free Software Foundation , ponieważ chociaż źródło było dostępne, nie pozwalała na redystrybucję zmodyfikowanych wersji. Trolltech używał tej licencji do wersji 1.45. Kontrowersje wybuchły około 1998 roku, kiedy stało się jasne, że K Desktop Environment stanie się jednym z wiodących środowisk graficznych dla Linuksa. Ponieważ był oparty na Qt, wiele osób w ruch wolnego oprogramowania martwił się, że kluczowy element jednego z ich głównych systemów operacyjnych będzie zastrzeżony.

Platforma Windows była dostępna tylko na licencji zastrzeżonej, co oznaczało, że darmowe/otwarte aplikacje napisane w Qt dla X11 nie mogły zostać przeniesione do systemu Windows bez zakupu zastrzeżonej edycji.

Stawanie się przyjaznym dla wolnego oprogramowania

Wraz z wydaniem wersji 2.0 zestawu narzędzi w połowie 1999 r. Licencja została zmieniona na Q Public License (QPL), licencję wolnego oprogramowania , ale uznaną przez Free Software Foundation za niezgodną z GPL. Poszukiwano kompromisów między KDE i Trolltech, dzięki którym Qt nie byłby w stanie podlegać bardziej restrykcyjnej licencji niż QPL, nawet gdyby Trolltech został wykupiony lub zbankrutował. Doprowadziło to do powstania fundacji KDE Free Qt, która gwarantuje, że Qt będzie objęte licencją w stylu BSD jeśli w ciągu 12 miesięcy nie zostanie wydana żadna bezpłatna/otwarta wersja Qt.

W 2000 roku Qt/X11 2.2 został wydany na licencji GPL v2, co zakończyło wszelkie kontrowersje dotyczące kompatybilności z GPL .

Pod koniec 2001 roku Trolltech wypuścił Qt 3.0, który dodał obsługę systemu Mac OS X (obecnie znanego jako macOS ). Obsługa systemu Mac OS X była dostępna tylko w ramach zastrzeżonej licencji do czerwca 2003 r., kiedy to firma Trolltech wypuściła Qt 3.2 z obsługą systemu Mac OS X dostępną na licencji GPL.

W 2002 roku członkowie projektu KDE on Cygwin rozpoczęli przenoszenie bazy kodu Qt/X11 na licencji GPL do systemu Windows. Było to odpowiedzią na odmowę Trolltechu udzielenia licencji na Qt/Windows na licencji GPL z powodu tego, że Windows nie był platformą wolnego oprogramowania/otwartego oprogramowania. Projekt osiągnął rozsądny sukces, chociaż nigdy nie osiągnął jakości produkcyjnej.

Zostało to rozwiązane, gdy Trolltech wypuścił Qt 4.0 również dla Windows na licencji GPL w czerwcu 2005. Qt 4 obsługiwał ten sam zestaw platform w wersjach wolnego oprogramowania / open source, jak w edycji zastrzeżonej, więc jest to możliwe, z Qt 4.0 i nowszymi wydaniach, aby tworzyć bezpłatne/otwarte aplikacje na licencji GPL przy użyciu Qt na wszystkich obsługiwanych platformach. GPL v3 ze specjalnym wyjątkiem została później dodana jako dodatkowa opcja licencjonowania. Wyjątek GPL umożliwia licencjonowanie ostatecznej aplikacji w ramach różnych niezgodnych z GPL wolnego oprogramowania / open source , takich jak Mozilla Public License 1.1.

Przejęcie przez Nokię

Nokia przejęła Trolltech ASA 17 czerwca 2008 r. I zmieniła nazwę najpierw na Qt Software, a następnie na Qt Development Frameworks.

Nokia skupiła się na przekształceniu Qt w główną platformę programistyczną dla swoich urządzeń, włączając w to port na platformę Symbian S60 . Wersja 1.0 pakietu Nokia Qt SDK została wydana 23 czerwca 2010 r. Kod źródłowy został udostępniony w Gitorious, zorientowanym na społeczność git , w celu stworzenia szerszej społeczności używającej i ulepszającej Qt.

14 stycznia 2009 r. Qt w wersji 4.5 dodał kolejną opcję, LGPL , aby uczynić Qt bardziej atrakcyjnym zarówno dla projektów open source innych niż GPL, jak i zamkniętych aplikacji.

W lutym 2011 roku Nokia ogłosiła swoją decyzję o porzuceniu technologii Symbian i oparciu swoich przyszłych smartfonów na platformie Windows Phone (i od tego czasu zrezygnowano również z obsługi tej platformy). Miesiąc później Nokia ogłosiła sprzedaż komercyjnych licencji i profesjonalnych usług Qt firmie Digia, z natychmiastowym celem wprowadzenia obsługi Qt na platformy Android , iOS i Windows 8 oraz dalszego skupiania się na rozwoju komputerów stacjonarnych i systemów wbudowanych, chociaż Nokia miała pozostać główną siłą rozwojową stojącą za ramami w tamtym czasie.

Łączenie i dzielenie z Digia

W marcu 2011 roku Nokia sprzedała komercyjną część licencyjną Qt firmie Digia, tworząc Qt Commercial. W sierpniu 2012 r. Digia ogłosiła, że ​​przejmie Qt od firmy Nokia. Zespół Qt w firmie Digia rozpoczął pracę we wrześniu 2012 roku. W ciągu miesiąca wydawali Qt 5.0, a nowsze wersje co pół roku z nowymi funkcjami i dodatkowymi obsługiwanymi platformami.

We wrześniu 2014 r. Digia przeniosła działalność Qt i prawa autorskie do swojej spółki zależnej, The Qt Company, która jest właścicielem 25 marek związanych z Qt. W maju 2016 r. Digia i Qt całkowicie podzieliły się na dwie niezależne firmy.

Projekt Qt i otwarte zarządzanie

Qt 5 został oficjalnie wydany 19 grudnia 2012 r. Ta nowa wersja oznaczała poważną zmianę na platformie, w której główną rolę odgrywała grafika przyspieszana sprzętowo, QML i JavaScript . Tradycyjne widżety QWidget tylko w języku C++ były nadal obsługiwane, ale nie korzystały z ulepszeń wydajności dostępnych dzięki nowej architekturze. Qt 5 przynosi znaczną poprawę szybkości i łatwości tworzenia interfejsów użytkownika.

Ramowy rozwój Qt 5 został przeniesiony do otwartego zarządzania na qt-project.org, co umożliwiło programistom spoza Digii przesyłanie poprawek do recenzji.

Współtwórcy Qt

Dystrybucja współpracowników innych niż Digia Qt (2013, tydzień 18)

Oprócz The Qt Company, wiele organizacji i osób używających Qt jako platformy programistycznej uczestniczy w otwartym rozwoju Qt poprzez Qt Project.

Jednym z takich dostawców Qt jest Klarälvdalens Datakonsult AB, szwedzka firma konsultingowa Qt. KDAB jest zaangażowany w wiele obszarów, w tym konserwację kilku komponentów.

Wraz z RIM/BlackBerry , KDAB utrzymuje porty QNX i BlackBerry 10 Qt.

Innym uczestnikiem jest firma Intel , udzielająca na przykład wsparcia Wayland . AudioCodes utrzymuje obsługę IBM ClearCase w Qt Creator .

Jako intensywny użytkownik Qt, projekt KDE przesyła wiele poprawek i funkcji z biblioteki programistów KDE Frameworks z powrotem do Qt.

Zobacz też

Bibliografia

Qt Wiki zawiera obszerną listę angielskich książek o Qt. Oto lista znanych książek:

Linki zewnętrzne