Jestem nowy w Qt i nie do końca rozumiem różnicę między Qt Quick Project a Qt Widget Project.
Mam nadzieję, że stworzę program, który rysuje siatkę sześciokątów, którą użytkownik może obracać i ścinać, a także przesuwać, powiększać i pomniejszać. W końcu będzie to kontroler MIDI. Który typ projektu byłby do tego lepszy i dlaczego?
Mam nadzieję, że to zadziała zarówno na platformach stacjonarnych, jak i mobilnych.
Odpowiedzi:
Uwaga: Widgety Qt zostały zastąpione widgetami QML; ta odpowiedź odpowiada na zadane pytanie, które jest teraz ściśle historycznym pytaniem o stare widżety Qt.
Qt Quick to deklaratywny interfejs użytkownika w stylu smartfona z obsługą wielu fajnych przejść animacji, które są powszechne w aplikacjach na smartfony. Quick to także dobry wybór do szybkiego tworzenia prototypu. Qt Widget to tradycyjny model interfejsu użytkownika zorientowany na komputery stacjonarne.
W tej chwili (przed Qt5) brakuje obsługi Qt Quick dla funkcji systemu pulpitu (ale jest ona poprawiana). W Quick nie ma tak dużego wsparcia dla menu, pasków narzędzi, okien dialogowych i innych standardowych zachowań pulpitu, podczas gdy Widget obsługuje te elementy wyjątkowo dobrze.
Czy chcesz, aby Twoja aplikacja wyglądała i sprawiała wrażenie natywnej na platformach komputerowych i tabletach, czy może tworzysz prostą aplikację na podstawie własnego niestandardowego widżetu interfejsu użytkownika? Jak powiedział Mat, jeśli Qt Quick obsługuje żądane funkcje, prawdopodobnie będzie to najszybsze podejście. Jeśli chcesz tworzyć w pełni funkcjonalne wersje na komputery stacjonarne, prawdopodobnie najlepszym rozwiązaniem będzie Qt Widget.
źródło
Jako ktoś, kto zajmuje się profesjonalnym tworzeniem aplikacji qt, każdego dnia wybiorę qml zamiast widżetów.
Widżety są dobre do bardzo podstawowych rzeczy, ale kiedy będziesz musiał stworzyć coś bardziej fantazyjnego, widżety wkrótce przestaną działać.
Qml jest po prostu o wiele bardziej elastyczny, możesz zakotwiczać elementy w dowolnym miejscu, zamiast korzystać z ograniczonego systemu widżetów. Prawie nie ma błędów w zależnościach od platformy, podczas gdy widżety są ich pełne. A system powiązań właściwości sprawia, że synchronizacja interfejsu użytkownika z modelem jest tak cholernie łatwa.
źródło
Uwaga : W tej odpowiedzi „Qt Widgets” odnosi się do aplikacji Qt Widgets, którą można wybrać podczas tworzenia nowej aplikacji Qt.
To jest siedem lat po tym, jak to pytanie zostało po raz pierwszy opublikowane ... ale oto moje „ obiektywne ” dwa centy, aby zneutralizować rozwój wydarzeń od tamtego czasu.
Odświeżenie
Język
Projekty Qt Quick używają QML i JavaScript .
Projekty Qt Widgets używają kodu C ++. (PyQt i PySide, powiązania Pythona dla Qt, używają Pythona.)
Wydajność i kodowanie
Jako takie, Qt Widgets można uznać za niskopoziomowe w porównaniu do Qt Quick. Ale to oznacza, że na dłuższą metę projekt Qt Widgets będzie działał szybciej i będzie miał lepszą wydajność. Bycie niskopoziomowym może być dobre, ponieważ Qt Widgets jest bardziej narażone na natywne API ( moduł QtCore , arkusze stylów Qt itp.). To powiedziawszy, jest często używany do tworzenia komputerów stacjonarnych.
Qt Quick jest przeznaczony bardziej do tworzenia aplikacji mobilnych (chociaż nadal można go używać w programowaniu na komputery stacjonarne). Ma gotowe do użycia wyskakujące okienka , animacje , zakładki i układy, elementy klikalne , szuflady i zwykłe kontrolki; wszystko wszechobecne w programowaniu mobilnym.
Projektowanie interfejsu użytkownika
Oba mają
ui
pliki, które współpracują z QtDesigner, zapewniając widok wysokiego poziomu do ustawiania układów i tworzenia interfejsów. (W Qt Quick rozszerzenia są.ui.qml
. W Qt Widgets są.ui
.).ui
Pliki nie są obowiązkowe ani konieczne: masz do wyboru tworzenie projektów i układów programowo przy użyciu QML / JS lub C ++ / Python.Uczenie się
Jeśli jesteś zupełnie nowy w programowaniu, proponuję najpierw przyjrzeć się Qt Quick. Osobiście uważam, że Qt Quick ma łagodniejszą krzywą uczenia się i jest łatwiejszy w obsłudze przy realizacji niezliczonych projektów. Nie bez powodu nazywa się to „Qt Quick ”. (Nie patrz jednak na widżety Qt, mają kilka fajnych modułów, które przewyższają QtQuick.)
Jednak jeśli już programowanie C ++ lub Python wcześniej, chciałbym zaproponować przyjrzeniu Qt Widgets pierwsze, aby przyzwyczaić się do ich sygnały i mechanizmu gniazda i moduły, które mogą Cię (np interesują
sql
,network
,gui
) obok programowania wzorów (np programowanie modelu / widoku do wyświetlania danych).Zwłaszcza w przypadku C ++, większość bibliotek innych niż Qt, które obsługują zdarzenia, używa
while
-loops, tak nie jest w przypadku Qt. Używają sygnałów i slotów .W końcu, nawet jeśli używasz głównie widżetów Qt, możesz zechcieć przyjrzeć się Qt Quick, ponieważ oferuje język deklaratywny wysokiego poziomu do pracy i pozwala na szybszą konfigurację. (Szczególnie w przypadku tworzenia aplikacji mobilnych).
Qt zawiera mnóstwo przykładów dla projektów Qt Quick i Qt Widget , wraz z forum . Nie powinieneś martwić się o pomoc na dłuższą metę. (Nie zapomnij o StackOverflow!)
Qt Quick + Qt Widget
Do tej pory traktowaliśmy je jak oddzielne byty. Ale możliwe jest zintegrowanie QML z C ++ . Pozwala to na korzystanie z Qt Widget, C ++ i innych modułów. Na przykład QtQuick udostępnia a,
TreeView
ale nieTreeModel
, które można / należy zarejestrować w QML z C ++. Często występuje separacja obaw , gdzie Qt zaleca rozdzielenie programów na UI i logikę odpowiednio na QML i C ++.Jest to również przydatne, jeśli, powiedzmy, potrzebujesz zaplecza do intensywnych zapytań SQL, algorytmów lub asynchronicznych żądań http / xml. Czy to nie fajne? Interfejs QML / JS oraz zaplecze C ++. Fullstack Qt'er. :-)
(To, czego nie próbowałem, to posiadanie zaplecza Pythona. Jeszcze nie dotykałem PyQt ...)
źródło
Qt Quick domyślnie wybiera QML, dialekt deklaratywny JSON z włączonym wbudowanym ECMAscript. Dzięki widżetom Qt projektant może tworzyć arkusze stylów, a programista wykonuje natywne kodowanie w C ++.
QML jest przetwarzany w czasie wykonywania. W ramach tego systemu wszystko może działać razem, a różnice po prostu dodają elastyczności do podejmowania decyzji przez architekta oprogramowania.
źródło
Po pierwsze, myślę, że powinieneś zacząć od Widget. Interfejs widżetu pomaga łatwo nauczyć się qt, a ponadto, jeśli twoje poprzednie doświadczenia dotyczą front-endowych rzeczy, których nauczyłbyś się szybko.
źródło