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)



"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."
E niby gdzie przeszło? W rozwojowym 12.04 dalej jest oparte o gtk+3, clutter i compizie.
Jako fallback jest włączana wersja Qt, ale o żadnym zastąpieniu póki co nie ma co mówić.
Co do reszty, dobra wiadomość jakby nie było. Więcej takich newsów.
Mogłem to lepiej opisać. Chodziło oczywiście wyłącznie o Unity 2D, o przejście na Qt w wersji nieakcelerowanej. Dużym newsem było swojego czasu odkrycie, że Quick zachowywał się w odczuciu użytkowników płynniej bez akceleracji niż GTK+/Clutter z akceleracją. Należy tu oczywiście uwzględnić odwieczne problemy ze sterownikami grafiki, które trawiły/trawią zarówno niczemu nie winne Ubuntu i KDE (KWin).
Odnośnie "przejścia" to wiele wskazuje na to, że jak Shuttleworth raz zagustował w Qt Quick to teraz nowe aplikacje będą powstawać niekoniecznie tylko w GTK+:
1. Klienta Ubuntu One już przepisano: http://iloveubuntu.net/qt-based-redesigned-ubuntu…
2. Jono Bacon, (Ubuntu Community Manager) dostał pracę domową: poznanie Qt Quick. Odrobił i nie ukrywa pozytywnych emocji: http://www.jonobacon.org/2011/12/04/ubuntu-and-qm…
3. Oczywiście Ubuntu TV (to już jest z akceleracją) też jest dobrą reklamą dla Quick: http://www.ubuntu.com/devices/tv
4. Kto wie co jest/będzie będzie w środku Ubuntu for Android skoro to samo Qt Quick jest tam już dostępne: http://www.ubuntu.com/devices/android
Tylko szkoda, że Qt for iOS nie będzie tak różowo ze względu na JIT.
Czy to nie jest reimplementacja Mono porzuconego przez Novella/Attachmate (ale nadal posiadanego)?
Z głównej strony: "Save time by sharing data structures and non-UI code between iOS and Android."
non-UI?
Czy taka aplikacja mono na Androidzie nie wyglada następująco: dwie maszyny wirtualne: Androidowa in .NET-owa?
Ciekawe, że właśnie Windows Phone jest tu wspólnym mianownikiem (a nie jest chyba wśród największych platform mobilnych, bo jest szósty za badą – http://en.wikipedia.org/wiki/Mobile_operating_sys….
Ciekawe też czy i jak to się rozwinie bo produkt ma około pół roku (firma dostała/nabyła prawa na stosowanie mono od Attachmate).
Czy to znaczy, że OpenGLowy backend Qt graphics system staje się stabilny?
graphicssystem=opengl dla QWidgetow to inne rozwiązanie, w Qt 5 jest to inaczej zrobione, and QPA. W efekcie: tak, QWidgety z opengl beda dostepne, nie bedzie trzeba wstawiac widoku GL do qwidgetow bo całe okna beda juz opengl-owe. Miejmy nadzieje ze nawet aplikacji QWidget-owe zyskaja, np. ze bedzie mozna wydajnie animowac layouty qwidgetów…
Bardzo użyteczny artykuł!!!
Nareszcie popracowali nad szybkością i wielowątkowością bez wspomagania sprzętowego. Teraz praktycznie każde najmniejsze urządzenie ma ,,jakieś'' OpenGL w sprzęcie, ciekawe jak to będzie działać w praktyce…
Na to długo czekałem ,,Poprawność połączeń sygnałów i slotów może być teraz sprawdzana podczas kompilacji programu''… bo często zdarzało mi się ,,programować stochastycznie'' w okolicach slotów i sygnałów 😉
Wygląda na to, że najwyższy czas zaznajomić się z Qt Quick, skoro jest tak promowane to prawdopodobnie jest dopracowane 🙂
Odnośnie szybkości bez wspomagania, to Scenegraph jest tu kluczem, idzie dalej w optymalicację niż graphicsview. Paradoksem jest większa 50% wydajność z llvm niz Qt4/OpenGL. Ale na to złożyło się wiele czynników. llvmpipe nie był dostępny w 2005 gdy projektowano Qt4. Akceleracja na urządeniach wbudowanych była tak sobie dostępna, teraz jest lepiej.
Co ciekawe ideę z graphicsscene miał już wcześniej Enlightenment (biblioteki EFL, konkretnie edje) ale on wymaga pisania w języku C (nieobiektowym), wymaga kompilacji by zdefiniować nawet proste rozszerzenia wobec czego nigdy się nie przyjął (nie ma praktycznie aplikacji pisanych przez ludzi spoza core teamu, a "artyści" nie mają narzędzi nadających się dla nich). Qt zaczął z QEdje, potem powstawały kolejne prototypy.
Warto dodac, że droga do Qt Quick była wyboista (wewnętrzne konflikty i konkurencja między projektami w Nokii), a Quick 1 i 2 zawdzięczamy działowi z Brisbane.
Odnośnie nauki Qt Quick – można zacząć nawet z wersją 1 (Qt 4) a potem się przesiąść – więc pewnie warto.
Odnośnie sprawdzania połączeń sygnałów i slotów – to niektóre pomysły w tym temacie stały się możliwe dopiero po wejściu C++11 do użycia (np. lambdy jako sloty!). Więcej na http://qt-project.org/wiki/New_Signal_Slot_Syntax
Qt Quick jest prosty i bardzo szybko można na nim robić efektowne aplikacje. Tylko trzeba pojąć jakie zasady tam panują.
Akurat jak KDE 4.x zaczęło przypominać działający software…
Znów Pan Budyń nie zrozumiał tekstu pisanego… Przeczytaj jeszcze raz akapit "Przenoszenie programów z Qt 4.x na Qt 5", oraz zapoznaj się z tematem przechodzenia Plasmy na QML.
Nie tekstu pisanego, a bełkotu życzeniowego fanbojów pseudoframeworku pisanego w archaicznym języku…
Mam nadzieję, że na PySide dla Qt5 nie trzeba będzie długo czekać.
I enjoy listening to music, often like to collect some lyrics online website, today to share a web site:wos321.com is a site to search the lyrics, the user can search various well-known songs lyrics. The lyrics this web site provides is ver abundant. http://www.wos321.com/
You are going to want to connect with your potential customers as well as your current customers, and social media is a great way for you to do this. You will be able to engage with the people who are on the social networks, even if they are not currently a customer or client.