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.
Antworten:
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.
quelle
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.
quelle
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
ui
Dateien, 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.ui
Dateien 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,
TreeView
aber keinTreeModel
, 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 ...)
quelle
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.
quelle
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.
quelle