Wielu z początkujących programistów C++, w momencie, gdy już posiądą pewną wiedzę na temat samego języka i jego standardowej biblioteki, staje przed wyborem technologii umożliwiającej stworzenie aplikacji okienkowej. Na tym etapie wiele takich osób porzuca C++ na rzecz innych, bardziej popularnych języków. Niemniej kurs Qt, który właśnie czytasz na łamach tego bloga ma za zadanie udowodnić, że aplikacje okienkowe w C++ mogą pisane być równie prosto i przyjemnie. Oczywiście na tym możliwości Qt się nie kończą! W tej części przekonasz się czym jest Qt oraz do czego jeszcze możesz go wykorzystać.
Uwaga
Zawodowo zajmuję się tematem Qt Development. Od czasu gdy napisałem te wpisy minęło kilka lat a ja zdążyłem założyć jednąz najbardziej znanych firm zajmujących się kodzeniem w Qt. Ten tutorial trochę się zaktualizował, więc zachęcam Cię odwiedzić stronę Scythe Studio, bo tam dzielimy się nowym tutorialem na YouTube, w którym temat jest podejmowany.
Zanim zaczniemy
W ramach tego kursu Qt w pierwszej kolejności będziemy się skupiać na tworzeniu interfejsu graficznego korzystając właśnie z tej technologii. Następnie to czytelnicy będą mogli zdecydować, w którą stronę pójdzie kurs. Dołożę wszelkich starań, aby nowe wpisy ukazywały się co czwartek. Miłej lektury!
Czym jest Qt?
Qt jest zestawem bibliotek języka C++ i narzędzi, które w sposób znaczny ułatwiają tworzenie multiplatformowych aplikacji właściwie bez konieczności wprowadzania żadnych zmian w kodzie. Oczywiście nie ma żadnych przeciwwskazań żeby tworzoną aplikację projektować tylko na potrzeby jednego systemu operacyjnego.
Framework Qt istotnie wpływa na czas pracy nad projektami uruchamianymi na więcej niż jednym systemie, ale oczywiście to nie jedyne jego zastosowanie. Dostarcza nam on również szeregu wygodnych w użyciu klas do obsługi systemu plików, zapytań sieciowych oraz do wielu innych celów.
Systemy wbudowane w Qt
Poza wsparciem dla Windowsa, Linuxa, Maca, Androida czy iOSa, Qt jest silnie promowany i powszechnie używany w systemach wbudowanych, a więc w szeroko rozumianych automatach gdzie niespotykaną zaletą jest wydajność C++’a i możliwości Qt. Jednym z niepowtarzalnych atutów Qt jest możliwość tworzenia unikatowego interfejsu niezależnie od wykorzystywanej platformy – w tym dla aplikacji dedykowanych systemom wbudowanym. W dalszej części tego wpisu zobaczysz przykłady wykorzystania omawianego frameworka właśnie w systemach wbudowanych. Warto też nadmienić, że obecnie duże zapotrzebowanie jest właśnie na specjalistów od systemów wbudowanych ze znajomością Qt.
Qt for WebAssembly
Poza wsparciem dla wspomnianych platform Qt od niedawna skłania się również w kierunku WebAssembly i już teraz można postawić aplikację webową pracującą wyłącznie w oparciu o kod napisany z wykorzystaniem tej technologii. Niesie to ze sobą możliwość stworzenia strony w oparciu o kod wykorzystany w aplikacji mobilnej! Tylko wyobraź sobie czytelniku stronę napisaną w C++ 😊 Dla mnie osobiście to duża rzecz, ponieważ w przypadku projektów webowych nie trzeba uczyć się nowych technologii. Niemniej nie uważam, aby ten aspekt działalności Qt był rozwinięty na tyle, aby był sens go używać. Aplikacje webowe stworzone w ten sposób potrafią być niestabilne a sama technologia musi jeszcze dojrzeć.
Moduły frameworka Qt
Z uwagi na szeroką gamę zastosowań frameworka, będącego przedmiotem tego kursu, podzielony został on na zamknięte moduły. Pozwala to na zachowanie bardziej spójnej aplikacji i zapewnienia jej mniejszego rozmiaru z uwagi na mniejszą ilość zależności. Do projektu dołączane są bowiem jedynie realnie wykorzystywane moduły. Podstawowe moduły określa się mianem Qt Essentials i prezentują się one następująco:
Moduł | Opis |
Qt Core | Podstawa frameworka zawierająca klasy wykorzystywane w innych modułach |
Qt GUI | Podstawowe klasy dla komponentów interfejsu graficznego. Obsługa OpenGL |
Qt Multimedia | Klasy do obsługi audio, wideo, radia czy aparatu. |
Qt Multimedia Widgets | Klasa rozszerzająca możliwości modułów Qt Multimedia oraz Qt Widgets |
Qt Network | Klasy ułatwiające implementację komunikacji sieciowej. |
Qt Qml | Klasy wspierające języki Qml oraz JavaScript |
Qt Quick | Framework umożliwiający tworzenie interfejsu użytkownika wykorzystując język Qml |
Qt Quick Controls | Dostarcza wygodnych w użyciu typów do wykorzystania podczas tworzenia interfejsu w języku Qml |
Qt Quick Dialogs | Dostarcza typów do obsługi systemowych okien dialogowych w aplikacjach opartych na Qt Quick |
Qt Quick Layouts | Dostarcza typy umożliwiające ułożenie w prosty sposób innych elementów interfejsu grafinczego. |
Qt Quick Test | Framework do testów jednostkowych dla aplikacji opartych na Qt Quick |
Qt SQL | Klasy wykorzystywane do integracji z bazami SQL |
Qt Test | Klasy do testów jednostkowych aplikacji napisanych w oparciu o Qt, ale też o czysty język C++. |
Qt Widgets | Klasy rozszerzające moduł Qt GUI o widżety |
Jak sam widzisz materiału na kolejne wpisy w ramach tego kursu Qt jest aż nadmiar. Wszystkich nie damy rady
omówić, ale całe szczęście Qt ma jedną z najlepszych dokumentacji jakie widziałem. Dostęp do niej możesz uzyskać z poziomu dedykowanego IDE dla programistów Qt, czyli z poziomu Qt Creatora, któremu przyjrzymy się bliżej w jednym z kolejnych wpisów. Dokumentację znajdziesz też w internecie pod tym adresem.
Pozostałe moduły frameworka Qt
Pewnie zszokuje Cię informacja, że moduły wymienione wyżej to jedynie wierzchołek góry lodowej. Jest ich kilka razy więcej! Qt Essentials są szerzej wykorzystywanymi modułami dostępnymi na wszystkich platformach. Pozostałe moduły określane są jako Qt Add-Ons, a ich pełną listę również znajdziesz w dokumentacji.
Narzędzia wspierające rozwój oprogramowania
Czymże byłby ten kurs Qt bez informacji na temat szerokiej gamy zintegrowanych w to środowisko narzędzi, które w wielu przypadkach znacznie ułatwiają nam pracę nad wybranymi aspektami tworzenia oprogramowania. Na ten moment ograniczę się jedynie do ich wymienienia z uwagi na ich ilość. Do wybranych narzędzi będziemy wracać w następnych wpisach w ramach tego kursu. Jeżeli chciałbyś przyjrzeć się im już teraz to odsyłam do dokumentacji.
- Qt Creator – multiplatformowe IDE oparte o system pluginów dedykowane pracy w Qt. Osobiście jedno z moich ulubionych środowisk;
- qmake – narzędzie do organizacji struktury projektu oraz automatycznego generowania plików makefile, na których podstawie odbywa się kompilacja. Wykorzystuje moc oraz uic;
- moc (Meta-Object Compiler) – program generujący dodatkowy kod źródłowy (.cpp) na podstawie plików nagłówkowych (.h). Jest to konieczne z uwagi na chociażby zbawienny mechanizm sygnałów i slotów wykorzystywany w Qt, ale o tym w jednym z kolejnych wpisów;
- uic (User Interface Compiler) – narzędzie tworzące pliki nagłówkowe (.h) na podstawie pliku .ui w formacie XML, który zawiera definicję interfejsu użytkownika tworzonego w ramach modułu Qt Widgets;
- Qt Designer – narzędzie typu WYSIWYG (what-you-see-is-what-you-get) ułatwiające tworzenie interfejsu użytkownika;
- Qt Linguist – narzędzie wykorzystywane do tłumaczenia aplikacji. Jest o tyle wygodne, że może być wykorzystywane przez osobę nietechniczną. Na przykład bez pośrednio przez tłumacza;
Tych narzędzi jest naprawdę cała masa z czego wielu sam nie znam. Jeżeli chodzi o te wymienione to spokojnie. Wszystko wyjdzie w praniu. Najważniejsze żebyś był na bieżąco z tym kursem.
Nie tylko C++ – języki obecne w środowisku Qt
Skoro już wiesz czym jest Qt to teraz czas dowiedzieć się w jakich językach można pisać wykorzystując go. Sam framework napisany został w języku C++, ale od premiery w roku 1995 minęło już wystarczająco dużo czasu, aby środowisko Qt wyewoluowało.
QML
Jedną z podstawowych zmian jakie zaszły jest wprowadzenie modułu Qt Quick, a wraz z nim nowego, deklaratywnego języka QML, będącego pewną wariacją języka JavaScript, wykorzystując między innymi składnię funkcji pochodzącą z tego języka. Dodatkowo kod napisany wyłącznie w JavaScript również może być wykorzystane w aplikacjach opartych o QML. Język ten jest niebywale prosty w nauce i obsłudze. Posiada składnię podobną do JSONa i wykorzystywany jest głównie do tworzenia interfejsu użytkownika. Frontend napisany z jego wykorzystywaniem może w dość prosty sposób komunikować się z backendem napisanym w C++, ale o samym języku jak i jego integracji z C++ przeczytacie w kolejnych wpisach.
Qt for Python
Qt może być wykorzystywany w Pythonie praktycznie na równi z C++ o czym szerzej przeczytać możecie na stronie twórców. Ciekawostką jest, że przez szereg lat projekt rozwijany był przez społeczność a obecnie pracują nad nim twórcy frameworka. Zatem Qt przestał być frameworkiem będącym domeną tylko jednego języka 😊
Inne języki programowania
Z frameworka korzystać można w językach takich jak C#, Rust, Go oraz wielu innych, ale z ich wsparciem bywa różnie. Niemniej na tej stronie znaleźć można częściowo kompletną listę dostępnych bindings dla obecnej wersji Qt.
Projekty rozwijane w oparciu o Qt
Zanim poczynimy kolejne kroki w tym kursie chcę żebyś zobaczył jak wiele świetnych projektów stworzonych zostało z wykorzystaniem technologii będącej tematem naszego kursu.
KDE
Świetny i inspirujący projekt środowiska graficznego dla systemów operacyjnych Unix i GNU/Linux w tym między innymi na urządzenia mobilne, tworzonego właśnie w Qt. W oparciu o KDE działa między innymi popularny Kubuntu.
Mercedes-Benz
Tak jak wspomniałem Qt jest szeroko wykorzystywany w systemach wbudowanych specjalnego przeznaczenia, a takimi są między innymi komputery pokładowe w nowoczesnych samochodach. Interfejs użytkownika kokpitów w samochodach wielu marek (nie tylko w samochodach z gwiazdą) napisany jest właśnie korzystając z tego frameworka.
CryEngine
Wielu twórców gier swój start lub nawet obecny byt zawdzięczają właśnie frameworkowi Qt. To z jego pomocą stworzony został edytor tego popularnego silnika do gier. Sama lista gier stworzonych w oparciu o to rozwiązanie jest naprawdę imponująca.
Inne istotne projekty wykorzystujące Qt
Oczywiście projekty wspomniane przed chwilą to tylko przedsmak, a jeżeli chodzi o inne popularne oprogramowanie stworzone przy użyciu omawianego frameworka, są to m.in.:
- Adobe Photoshop Elements – program do obróbki zdjęć;
- FileZilla – klient FTP, FTPS oraz SFTP;
- LG webOS – system stworzony przez LG na potrzeby ich urządzeń;
- Maya – program do grafiki 3D;
- Origin – popularna platforma dystrybucji gier;
- Steam – popularna platforma dystrybucji gier;
- Virtualbox – program do tworzenia i nadzorowania maszyn wirtualnych;
Licencja Qt
Na chwilę obecną Qt dostępny jest w ramach licencji komercyjnej oraz licencji open-source. Jeżeli chodzi o licencję komercyjną to należy powiedzieć, że jest po prostu nieadekwatnie droga. Roczna licencja na tworzenie aplikacji mobilnych i desktopowych kosztuje 5500$ na jednego programistę. Na szczęście licencja ta nie jest konieczna, aby na tworzonych przez siebie aplikacjach zarabiać. Qt dostępny jest również w ramach licencji GPL oraz mniej restrykcyjnej licencji LGPLv3. Zwłaszcza ta druga jest warta uwagi, ponieważ pozwala nam na zachowanie naszego kodu źródłowego w tajemnicy i jednoczesnym zarabianiu na projekcie.
Dla kogo zatem wersja komercyjna?
Wersja komercyjna dedykowana jest zespołom pracującym nad systemami wbudowanymi oraz tym, którzy wykorzystują moduły Qt dostępne w ramach licencji GPL obligującej do udostępnienia kodu programu. Takimi modułami są między innymi Qt Charts czy Qt for WebAssembly. Więcej o licencjach przeczytać możecie pod tym adresem.
Podsumowanie
Jestem dumny, że dotarłeś na sam koniec tego wpisu. Mam nadzieję, że zainteresowałem Cię tą technologią i zostaniesz ze mną na dłużej. Po lekturze tego wpisu powinieneś wiedzieć czym jest Qt oraz w jakich projektach jest wykorzystywany. W następnej części tego kursu zainstalujemy środowisko i napiszemy pierwszy program. Daj znać co myślisz o tym wpisie i co jeszcze chciałbyś zobaczyć w kolejnych częściach tego kursu Qt.