Qt Quick vs. Qt Widget [zamknięty]

81

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.

Anthony
źródło
3
Poświęć trochę czasu na stronę Qt Quick i rozejrzyj się po przykładach. Jeśli tego potrzebujesz, użyj tego. Jeśli nie, dostałem normalny projekt widżetu Qt, ale platformy mobilne prawdopodobnie będą problemem.
Mat
Zaktualizowany link do komentarza Mata doc.qt.io/qt-5/qtquick-index.html
Ayxan Haqverdili

Odpowiedzi:

39

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.

AndrewS
źródło
1
Chciałbym obu. :) Używanie Qt Widget na razie.
Anthony
10
Ta odpowiedź powinna zostać usunięta, poddana edycji lub obniżona, ponieważ jesteśmy teraz w post Qt 5.0, zbliżamy się nawet do 6.0, a Qt Widgets zostały zastąpione przez QML Widgets.
Ariel M.,
15
QML NIE zastępuje Qt Widgets, nawet teraz w 2019 roku, przynajmniej do czasu, gdy zastąpi projekty takie jak Qwt, QCustomPlot i wiele innych, co wydaje się nie mieć miejsca. Aż do chwili, gdy będzie to kolejny sposób realizacji, ni mniej, ni więcej.
Andry
1
@Ariel M. Qt Widgets nie jest zastępowane i nie może być, przynajmniej dopóki wszystko nie zostanie przepisane, co nie jest prawdą.
Andry
1
Qwt i QCustomPlot są projektami stron trzecich i nie są częścią QtWidgets, więc nie ma znaczenia, czy są one przenoszone, czy nie. Co więcej, Anthony jest nowicjuszem i pytał o stworzenie kontrolera MIDI, w którym potrzebny byłby mocno dostosowany interfejs użytkownika (patrz Arena, Lemur PS Elements i podobne oprogramowanie). QML to droga do zrobienia.
Ariel M.
37

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.

Teimpz
źródło
3
Dzięki! Właśnie zdecydowałem się zacząć od QML / QtQuick, opierając się na Twoim doświadczeniu zawodowym przedstawionym w Twojej odpowiedzi. Po prostu uświadom sobie, że mogę łatwo korzystać z * .ui.qml z QtCreator i używać go bezpośrednio w PyQt. Rozwiązałem moją początkową konfigurację Pythona + QtQuick!
swdev
2
Używanie QtQuick do złożonych programów komputerowych to zły pomysł pod względem wydajności ...
Yousha Aleayoub
Może nie masz wystarczającego doświadczenia z interfejsem API układów? Jakieś przykłady tego, co możesz zrobić z QML, a czego nie możesz zrobić z widżetami? Pracuję z Qt nad aplikacjami z użytkownikami 10K na całym świecie od ponad 5 lat i używamy widżetów, ponieważ tylko one zapewniają nieograniczoną moc. QML jest dobry dla prototypów i małych projektów. I tak, wydajność ma znaczenie. Ponadto, ponieważ QML jest oparty na OpenGL, jest to blokada pokazu, jeśli twoja baza użytkowników jest pełna starego sprzętu.
Dalamber
37

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ą uipliki, 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.) .uiPliki 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, TreeViewale 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 ...)

TrebledJ
źródło
7

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.

Chawathe Vipul S.
źródło
5

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.

myd0
źródło