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 nie TreeModel
, 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 ...)