Po 9 miesiącach prac światło dzienne ujrzał zestaw bibliotek i narzędzi programistycznych Qt 5 w wersji Alfa. Pod kilkoma względami jest to wydanie przełomowe. Po raz pierwszy w tak wczesnej fazie prac w skład zespołu programistów weszli specjaliści spoza firmy Nokia.
Głównym celem wydania wersji Alfa jest zgromadzenie uwag i wskazówek, które będą podstawą przy publikowaniu kolejnych wersji w serii 5. Obecnie skoncentrowano się na modułach z grupy Qt Essentials stanowiących podstawę Qt 5.
Wersja Alfa jest dostępna jedynie w postaci kodu źródłowego. Instrukcje budowania można znaleźć na stronie wiki projektu. W niniejszym artykule przedstawiono stopień realizacji celów obranych w maju 2011.
Wizja
Zasadniczą wizję wyznaczającą kierunek prac nad Qt 5 można określić następująco:
Qt 5 powinien być podstawą nowego podejścia do tworzenia aplikacji. Zachowując możliwość budowania programów natywnych w języku C++, należy się skoncentrować na przejściu do modelu, gdzie C++ jest stosowany głównie do definiowania funkcji logiki biznesowej aplikacji opartych na Qt Quick.
Qt 5.0 zbliża się do realizacji tej wizji. Sprawdza się już ona w przypadku pełnoekranowych interfejsów użytkownika na urządzenia przenośnych i wbudowanych. Na desktopie przechodzenie na Qt 5 zajmie trochę więcej czasu, prawdopodobnie rozpocznie się to przy wydaniu Qt 5.1 lub 5.2.
Otwarty rozwój
Twórcy Qt 5 za cel wybrali otwarty model rozwoju w ramach jednej społeczności z klarownymi zasadami (opisywany już na OSNews.pl Open Governance), aktywnie formującej się wraz z powołaniem do życia inicjatywy qt-project.org. Większość założeń naszkicowanych dwa lata temu zostało osiągniętych. Obecnie istotna liczba poprawek oraz nowych funkcji pochodzi od społeczności – zarówno firm i organizacji (m.in. KDE, Digia, Collabora, Accenture, KDAB) jak też od osób indywidualnych.
Do społeczności może dołączyć każdy. Oprócz wysokiej jakości dokumentacji, dostępne są fora (także polskie), samouczki, filmy, liczne przykłady, a szereg aplikacji Qt jest dostępnych z pełnym kodem źródłowym.
Cztery zmiany w architekturze Qt
Podczas projektowania nowej serii zostały podjęte decyzje o zmianach w wewnętrznej architekturze Qt:
- Wszystkie edycje Qt mają teraz bazować na nowej warstwie abstrakcji Qt Platform Abstraction (QPA), tak by ułatwić natywne uruchamianie programów Qt na jeszcze większej liczbie urządzeń i systemów okienkowych. Warstwa QPA została wprowadzona już w Qt 4.8 jako następca QWS/Qt Embedded dla urządzeń wbudowanych, a obecnie jest stosowana na wszystkich platformach. Zastosowanie bardziej przejrzystej architektury wewnętrznej Qt umożliwiło powstanie wersji dla QNX, Androida oraz iOS.
- Osiągnięcie widocznego (ok. 2,5x) wzrostu wydajności grafiki w porównaniu do Qt 4 dzięki przeprojektowaniu systemu grafiki z zastosowaniem Qt Quick w wersji 2 i akceleracji OpenGL ES 2 lub OpenGL. Qt 5 wprowadza nową architekturę graficzną dla Qt Quick wykorzystującą struktury danych typu Scenegraph znane z gier i programów 3D. Aby było to możliwe i działało wydajnie, niezbędne było użycie OpenGL. Należy jednocześnie zaznaczyć, że akceleracja nie musi być sprzętowa; można stosować bibliotekę mesa 3D z llvmpipe co paradoksalnie nie ustępuje wydajności grafiki w Qt 4, a przy użyciu przetwarzania wielowątkowego skutkuje ok. 1.5x lepszą wydajnością.
Podejście to jest stosowane oprócz urządzeń wbudowanych, np. w Ubuntu Unity, które przeszło z GTK+ i Clutter na Qt Quick 1 bez wprowadzania wymagania sprzętowej akceleracji grafiki. Przejście na Qt Quick 2 zapewnie jeszcze bardziej usprawni działanie Unity.
System wyświetlania QPainter z Qt 4 będzie nadal dostępny w trybie grafiki rastrowej, OpenGL, generacji PDF oraz drukowania. Zgodność z Qt 4 ma umożliwiać uruchamianie w znacznej mierze niezmienionych programów Qt 4 z użyciem Qt 5.
- Modularyzacja repozytorium kodu źródłowego Qt w celu osiągnięcia większej niż poprzednio elastyczności i uczynienia podejścia do programowania dla desktopu i urządzeń przenośnych uniwersalnym. Ten cel to głównie zmiany organizacyjne. Biblioteki Qt Mobility stają się w ten sposób pełnoprawnymi, choć opcjonalnymi, modułami Qt. Podział Qt na więcej mniejszych modułów uniezależnia różne funkcje od siebie, podczas gdy dla użytkowników nie jest to widoczne.
Wydzielenie opcjonalnych modułów Qt oraz modułów dostarczanych przez zewnętrznych autorów (3rd-party) jest pomocne choćby z powodu różnych potrzeb pojawiających przy programowaniu dla laptopów, tabletów i telefonów. Przydaje się to również dlatego, że wraz z wydaniem Qt 5.0 będzie (tak jak w ramach Qt 4.x) obowiązywała znana z poprzednich edycji ścisła zasada zgodności binarnej bibliotek. W ten sposób Qt 5 będzie dostarczać więcej modułów i funkcji niż jakakolwiek poprzednia wersja. Moduły dodatkowe znajdują się w grupie zwanej Qt Add-ons.
Oddzielenie wszystkich QWidgetów przez umieszczenie ich w osobnej bibliotece graficznej. Krok ten zapewnia niezmieniony dostęp do biblioteki graficznej opartej na QWidget w sytuacjach gdy zachodzi taka potrzeba, a jednocześnie poprawia modularność, przez co nie wymusza dostarczania obsługi QWidget na w przypadkach gdy interfejs graficzny jest realizowany wyłącznie przy pomocy Qt Quick.
Fundamentalne zmiany w Qt zapowiedziane na długo przed wydaniem wersji Alfa wywołały szereg pytań i dyskusji. Zostały one rozpatrzone, co zapewne miało pozytywny wpływ na jakość niniejszego wydania.
Nowe funkcje
Obok zmian w architekturze Qt, piąta edycja oferuje szereg nowych funkcji. Oto ich krótkie omówienie:
- Qt Core oferuje teraz QStandardPaths – narzędzie do uzyskiwania informacji standardowych lokalizacjach plików (dokumenty multimedia) bez względu na rodzaj urządzenia na którym działa Qt. Pojawiła się wydajna obsługa formatu JSON (stosuje go też QML), bardziej optymalne wyrażenia regularne (w stylu Perla) oraz rozpoznawanie typów plików (MIME) zarówno po rozszerzeniu jak i zawartości. Ta ostatnia funkcja została dostarczona przez osoby z projektu KDE. Poprawność połączeń sygnałów i slotów może być teraz sprawdzana podczas kompilacji programu. Wreszcie, Qt wykorzystuje nowy standard C++11 w przypadkach gdzie ma to sens (o ile sobie tego życzymy i obsługuje go kompilator).
- Qt Gui nie zawiera teraz żadnych QWidgetów, gdyż te zostały przeniesione do osobnej biblioteki QtWidgets. Obsługa OpenGL jest teraz wbudowana w Qt Gui.
- Qt Network oprócz dodania licznych usprawnień obsługuje teraz przeszukiwanie DNS.
- Qt Widgets – klasyczne widżety Qt z punktu widzenia programisty działają tak jak w Qt 4, jednak wewnętrznie są obsługiwane w architekturze abstrakcji QPA.
Qt Quick jest teraz dostępny w dwóch wersjach: Qt Quick 1 i Qt Quick. Qt Quick 1 jest odpowiednikiem Qt Quick z Qt 4. Stanowi on część Qt 5 w celu utrzymania pełnej zgodności z Qt 4, jednak nie będą do niego dodawane żadne nowe funkcje, a jedynie poprawki. Druga wersja Qt Quick to zaś narzędzie zalecane przy tworzeniu aplikacji w Qt 5.
Oprócz wspomnianego przyrostu wydajności możliwego dzięki zastosowaniu Scenegraph, do osobnych modułów przeniesiono obsługę języków QML oraz JavaScript (oparty na szybkim silniku V8 znanym z Google Chrome). Może to prawdopodobnie pozwolić na tworzenie aplikacji QML nie korzystających z ekranu graficznego. Nowy Qt Quick ma być w znacznej mierze zgodny z Qt Quick 1; różnice będą widoczne przy pisaniu rozszerzeń elementów QML w języku C++.
- Qt 3D i Qt Location to nowe moduły z Qt Essentials. Qt 3D umożliwia programowanie 3D w Qt (C++ oraz Qt Quick), przy czym obsługuje wiele formatów modeli 3D, w tym format 3D Studio MAX od Autodesk. Qt Location oferuje programistom dostęp do GPS, map i innych usług lokalizacyjnych.
-
Qt WebKit korzysta z nowej wersji 2 silnika WebKit oferując przez to lepszą zgodność ze sztandarem HTML 5.
Przenoszenie programów z Qt 4.x na Qt 5
Łatwość przechodzenia na Qt 5 jest jednym z priorytetów projektu. Liczba zmian jakich ma dokonać programista w swoim kodzie źródłowym przy przechodzeniu na Qt 5 jest obecnie niewielka. Rzecz jasna kod trzeba ponownie skompilować, gdyż nie ma zgodności binarnej między wersją 4 a 5. Szczegółowe instrukcje znajdują się na wiki projektu. Przykładem pokazującym poziom przenośności kodu źródłowego może być fakt, że Qt Creator już obecnie kompiluje się i działa z Qt 4 oraz 5 przy użyciu tego samego kodu źródłowego.
Programiści powinni pamiętać, że nie ma nagłej potrzeby przechodzenia na Qt 5. Qt 4.8 wciąż będzie przez znaczny czas pielęgnowane przez społeczność i firmy takie jak Digia. Przejście na Qt 5 należy uwzględniać po wykonaniu rachunku korzyści i kosztów.
Co dalej?
Powyższy opis pokazuje pokrótce jak wiele zdarzyło się w dziedzinie Qt odkąd wystartował projekt 5. Osoby zainteresowane pomocą przy projekcie mogą pobrać wersję Alfa w celu jej wypróbowania i zgłoszenia swych uwag. Dobrym sposobem kontaktu jest lista dyskusyjna development@qt-project.org (rejestracja na lists.qt-project.org) lub zgłaszanie błędów na stronie bugreports.qt-project.org. Poprawki do kodu źródłowego zgłasza się w otwartym systemie codereview.qt-project.org.
W sieci dostępne są liczne przykłady zastosowania Qt 5. Oto najciekawsze z nich:
- Pimp my video: prezentacja użycia użycia programów cieniujących (OpenGL Shaders) z Qt Quick
- Jak wyżej, efekty graficzne aplikowane do statycznych obrazów
- Qt 5, QML i shadery na urządzeniu Raspberry Pi (kosztującym kilkadziesiąt PLN).
- Qt 5 optymalizowane dla Raspberry Pi
- Prezentacja Qt 3D
- Qt MediaHub – prezentacja potęgi i wygody użycia Qt Quick.
- Qt 5 dla tabletu Blackberry Playbook
- Snowshoe – przeglądarka internetowa wykonana w pełni w Qt Quick z Qt 5, działająca na telefonach N9
- Quasi Engine – silnik do gier 2D
Programowanie efektów video z Qt Quick 2 na żywo:
(na podstawie artykułu Larsa)