Qt Quick vs. Qt Widget [geschlossen]

80

Ich bin neu bei Qt und verstehe den Unterschied zwischen einem Qt-Schnellprojekt und einem Qt-Widget-Projekt nicht ganz.

Ich hoffe, ein Programm zu erstellen, das ein Sechseckgitter zeichnet, das der Benutzer drehen und scheren sowie schwenken und vergrößern und verkleinern kann. Es wird schließlich ein MIDI-Controller sein. Welche Art von Projekt wäre dafür besser und warum?

Ich hoffe, dass dies sowohl auf Desktop- als auch auf mobilen Plattformen funktioniert.

Anthony
quelle
3
Verbringen Sie ein wenig Zeit auf der Qt Quick- Website und sehen Sie sich die Beispiele an. Wenn Sie das brauchen, verwenden Sie es. Wenn nicht, habe ich für ein normales Qt-Widget-Projekt, aber mobile Plattformen werden möglicherweise ein Problem sein.
Mat
Aktualisierter Link für Mats Kommentar doc.qt.io/qt-5/qtquick-index.html
Ayxan Haqverdili

Antworten:

40

Hinweis: Qt-Widgets wurden durch QML-Widgets ersetzt. Diese Antwort beantwortet die gestellte Frage, die nun ausschließlich eine historische Frage zu den alten Qt-Widgets ist.

Qt Quick ist eine deklarative Benutzeroberfläche im Smartphone-Stil, die viele der coolen Animationsübergänge unterstützt, die in Smartphone-Apps üblich sind. Quick ist auch eine gute Wahl für die schnelle Entwicklung eines Prototyps. Qt Widget ist das traditionelle Desktop-orientierte UI-Modell.

Derzeit (vor Qt5) fehlt die Qt Quick-Unterstützung für Desktop-Systemfunktionen (verbessert sich jedoch). Menüs, Symbolleisten, Dialogfelder und andere Standard-Desktop-Verhaltensweisen werden in Quick nicht so stark unterstützt, während Widget diese Elemente sehr gut unterstützt.

Möchten Sie, dass Ihre App auf Desktop- und Tablet-Plattformen nativ aussieht oder sich nativ anfühlt, oder erstellen Sie eine einfache Anwendung um Ihr eigenes benutzerdefiniertes UI-Widget? Wie Mat sagte, wenn Qt Quick die gewünschten Funktionen unterstützt, ist dies wahrscheinlich der schnellste Ansatz. Wenn Sie Desktop-Versionen mit vollem Funktionsumfang erstellen möchten, ist Qt Widget wahrscheinlich die beste Wahl.

AndrewS
quelle
1
Ich möchte beides. :) Qt Widget jetzt verwenden.
Anthony
10
Diese Antwort sollte entweder entfernt, bearbeitet oder herabgestuft werden, da wir uns jetzt in einem Beitrag Qt 5.0 befinden. Wir nähern uns sogar 6.0 und Qt-Widgets wurden durch QML-Widgets ersetzt.
Ariel M.
Die Antwort oder die Frage? Scheint, als würden Sie sagen, dass die Frage nicht mehr relevant ist.
AndrewS
14
QML ist auch jetzt im Jahr 2019 KEIN Ersatz für Qt-Widgets, zumindest bis es Projekte wie Qwt, QCustomPlot und viele andere ersetzt, was anscheinend nicht der Fall ist. Bis es nur eine andere Art der Implementierung ist, nicht mehr und nicht weniger.
Andry
1
Qwt und QCustomPlot sind Projekte von Drittanbietern und nicht Teil von QtWidgets. Daher ist es unerheblich, ob sie portiert sind oder nicht. Darüber hinaus ist Anthony ein Neuling und wollte einen MIDI-Controller erstellen, für den eine stark angepasste Benutzeroberfläche erforderlich ist (siehe Arena, Lemur PS Elements und ähnliche Software). QML ist der richtige Weg.
Ariel M.
37

Als jemand, der qt-Anwendungen professionell entwickelt, werde ich jeden Tag qml gegenüber Widgets wählen.

Widgets sind gut für die grundlegenden Dinge, aber wenn Sie etwas erstellen müssen, das etwas ausgefallener ist, werden Widgets sehr bald zu kurz kommen.

Qml ist einfach viel flexibler. Sie können Elemente überall verankern, anstatt das eingeschränkte Layoutsystem von Widgets zu verwenden. Es gibt fast keine Plattformabhängigkeitsfehler, während Widgets voll davon sind. Und das Eigenschaftsbindungssystem macht es so verdammt einfach, Ihre Benutzeroberfläche mit Ihrem Modell synchron zu halten.

Teimpz
quelle
3
Vielen Dank! Ich habe mich gerade entschlossen, mit QML / QtQuick zu beginnen, basierend auf Ihrem beruflichen Hintergrund, der in Ihrer Antwort angegeben ist. Stellen Sie einfach fest, dass ich die * .ui.qml von QtCreator problemlos verwenden und direkt in PyQt verwenden kann. Ich habe mein erstes Setup von Python + QtQuick gelöst!
Swdev
2
Die Verwendung von QtQuick für komplexe Desktop-Programme ist eine schlechte Idee für die Leistung ...
Yousha Aleayoub
Vielleicht haben Sie nicht genug Erfahrung mit der Layout-API? Gibt es ein Beispiel dafür, was Sie mit QML tun können, was Sie mit Widgets nicht tun können? Ich arbeite seit mehr als 5 Jahren mit Qt an Apps mit 10.000 Benutzern weltweit und wir verwenden Widgets, weil nur sie unbegrenzte Leistung bieten. QML eignet sich für Prototypen und kleine Projekte. Und ja, Leistung ist wichtig. Da QML OpenGL-gesteuert ist, ist dies ein Show-Stopper, wenn Ihre Benutzerbasis mit alter Hardware gefüllt ist.
Dalamber
34

Hinweis : In dieser Antwort bezieht sich "Qt-Widgets" auf eine Qt-Widgets-Anwendung, die beim Erstellen einer neuen Qt-Anwendung ausgewählt werden kann.

Dies ist sieben Jahre, nachdem die Frage zum ersten Mal gestellt wurde ... aber hier ist mein " Ziel ", zwei Cent, um jegliche Entwicklungen seitdem zu neutralisieren.

Eine Auffrischung

Sprache

Qt Quick-Projekte verwenden QML und JavaScript .

Qt Widgets-Projekte verwenden C ++ - Code. (PyQt und PySide, Python-Bindungen für Qt, verwenden Python.)

Leistung und Codierung

Daher können Qt-Widgets im Vergleich zu Qt Quick als niedrig eingestuft werden. Dies bedeutet jedoch, dass ein Qt Widgets-Projekt auf lange Sicht schneller ausgeführt wird und eine bessere Leistung aufweist. Low-Level zu sein kann jedoch gut sein, da Qt Widgets stärker der nativen API (dem QtCore-Modul , Qt Style Sheets usw.) ausgesetzt sind . Das heißt, es wird oft für die Desktop-Entwicklung verwendet.

Qt Quick ist eher auf die mobile Entwicklung ausgerichtet (obwohl es weiterhin in der Desktop-Entwicklung verwendet werden kann). Es verfügt über einsatzbereite Popups , Animationen , Registerkarten und Layouts, flickbare Elemente , Schubladen und die üblichen Steuerelemente. alles allgegenwärtig in der mobilen Entwicklung.

UI-Design

Beide haben uiDateien, die mit QtDesigner zusammenarbeiten und eine allgemeine Ansicht zum Festlegen von Layouts und zum Erstellen von Schnittstellen bieten. (In Qt Quick sind Erweiterungen vorhanden .ui.qml. In Qt Widgets sind sie vorhanden .ui.) Die .uiDateien sind weder obligatorisch noch erforderlich: Sie haben die Wahl, Design und Layouts programmgesteuert mit QML / JS oder C ++ / Python auszuführen.

Lernen

Wenn Sie mit dem Programmieren noch nicht vertraut sind, sollten Sie sich zuerst Qt Quick ansehen. Persönlich denke ich, dass Qt Quick eine sanftere Lernkurve hat und einfacher zu bearbeiten ist, um unzählige Projekte durchzuführen. Es heißt aus einem bestimmten Grund "Qt Quick ". (Schauen Sie nicht auf Qt Widgets herab, sie haben einige nette Module, die QtQuick übertreffen.)

Wenn Sie jedoch die Programmierung mit C sind ++ oder vor Python, ich würde vorschlagen , einen Blick auf Qt Widgets nimmt zunächst gewöhnungs ihre Signale und Slot - Mechanismus und Module , die Sie (zB interessieren könnten sql, network, gui) neben der Programmierung Design (zB Modell- / Ansichtsprogrammierung zur Anzeige von Daten).

Insbesondere bei C ++, den meisten Nicht-Qt-Bibliotheken, die Ereignisbehandlungsschleifen verwenden while, ist dies bei Qt nicht der Fall. Sie verwenden Signale und Slots .

Selbst wenn Sie hauptsächlich Qt-Widgets verwenden, sollten Sie sich Qt Quick ansehen, da es eine deklarative Hochsprache für die Arbeit bietet und es Ihnen ermöglicht, Dinge schneller einzurichten. (Speziell für die mobile Entwicklung.)

Qt bietet zahlreiche Beispiele für Qt Quick- und Qt Widget- Projekte sowie ein Forum . Sie sollten sich auf lange Sicht keine Sorgen machen, Hilfe zu bekommen. (StackOverflow nicht vergessen!)

Qt Quick + Qt Widget

Bisher haben wir sie wie separate Einheiten behandelt. Es ist jedoch möglich, QML in C ++ zu integrieren . Auf diese Weise können Sie Qt Widget, C ++ und andere Module nutzen. Zum Beispiel bietet QtQuick ein, TreeViewaber kein TreeModel, das aus C ++ in QML registriert werden kann / sollte. Oft gibt es eine Trennung der Bedenken , wobei Qt empfiehlt, Programme in UI und Logik in QML bzw. C ++ zu trennen.

Dies ist auch praktisch, wenn Sie beispielsweise ein Backend für intensive SQL-Abfragen, Algorithmen oder asynchrone http / xml-Anforderungen benötigen . Ist das nicht cool? QML / JS-Frontend plus ein C ++ - Backend. Fullstack Qt'er. :-)

(Was ich nicht ausprobiert habe, ist ein Python-Backend. Ich habe PyQt noch nicht berührt ...)

TrebledJ
quelle
7

Qt Quick verwendet standardmäßig QML, deklarativen JSON-Dialekt mit aktiviertem Inline-ECMAscript. Mit Qt-Widgets können Stylesheets vom Designer erstellt werden, und der Entwickler führt native C ++ - Codierung durch.

QML wird zur Laufzeit verarbeitet. Innerhalb des Frameworks kann alles zusammen laufen, die Unterschiede erhöhen lediglich die Flexibilität bei der Entscheidungsfindung des Softwarearchitekten.

Chawathe Vipul S.
quelle
5

Erstens denke ich, dass Sie mit Widget beginnen sollten. Mithilfe der Widget-Benutzeroberfläche können Sie qt ganz einfach erlernen, wenn es in Ihren früheren Erfahrungen um Front-End-Dinge geht, die Sie schnell und einfach erlernen würden.

myd0
quelle