2010-04-24 9 views
18

Ich werte gerade QtQuick (Qt User Interface Creation Kit), die als Teil von Qt 4.7 veröffentlicht werden wird. QML ist die JavaScript-basierte deklarative Sprache hinter QtQuick.Welche praktischen Vorteile bieten deklarative UI-Sprachen wie XAML und QML?

Es scheint ein sehr mächtiges Konzept zu sein, aber ich frage mich, ob irgendjemand, der andere, ausgereiftere deklarative UI-Sprachen wie XAML in WPF oder Silverlight ausgiebig nutzt, einen Einblick in die realen Vorteile gibt kann von dieser Art der Programmierung gewonnen werden. Verschiedene Vorteile werden oft zitiert:

  • Geschwindigkeit der Entwicklung
  • Forces Trennung zwischen Darstellung und Logik
  • bessere Integration zwischen Programmierer und Designer
  • UI Änderungen erfordern keine erneute Kompilierung

Gibt es auch irgendwelche Nachteile? Einige mögliche Problembereiche in den Sinn:

  • Ausführungsgeschwindigkeit
  • Speichernutzung
  • hinzugefügt Komplexität

es andere Überlegungen, die berücksichtigt werden sollten?

+1

XAML bietet einen anderen Codierungsstil für komplexe hierarchische Beziehungen. Wenn Sie dies mit generalisierten Markuperweiterungen kombinieren, erhalten Sie ein extrem leistungsfähiges System zum Erstellen und Verknüpfen von Objekten in einer übersichtlichen Weise. –

+0

Ich bin gerade dabei, diese Diskussion zu lesen. Xaml und Qml sind lediglich Neuentwicklungen von alten Ressourcendateien, die ursprünglich auf dem Mac entwickelt wurden und den Weg nach Windows fanden. XML fällt jetzt bei einigen Leuten, die JSON bevorzugen, in Ungnade, was noch mehr dem Ressourcendateiformat entspricht. Zurück in den Tag, bevor der Befehl Liner aus ihren UNIX Höhlen gekrochen, hatten wir GUIs, die das Dateiformat von Ihnen verborgen. Niemand hat sich darüber beschwert, weil es einfach funktioniert hat. Lustiger, je mehr Dinge sich ändern, desto mehr bleiben sie gleich. –

Antwort

13

(aktualisiert)

Das Missverständnis mit XAML ist, dass es nicht kompiliert. Es ist in der Tat kompiliert zu BAML eine binäre vor-Tokenized XAML. Anscheinend gab es eine IL-kompilierte Version von XAML, auch CAML genannt. Die OP wies mich auf diese good article zu erklären, was XAML/BAML und CAML sind.

Wie auch immer, auf die Frage, warum es zu benutzen:

XAML ist einfach eine Serialisierung Format für C# Objekte, die es besonders gut geeignet ist, hierarchische Objektstrukturen zu beschreiben, wie in WPF GUIs gefunden.

Was WPF hilft Ihnen tun ist, schreiben weniger langweilig C# -Code wie folgt aus:

var grid = new Grid(); 
grid.Content.add(new TextBlock() {Text = "Hello"}); 
grid.Content.add(new TextBlock() {Text = "World"}); 

und es einfach so in eine besser lesbare Art und Weise ausdrücken:

<Grid> 
    <TextBlock Text="Hello"> 
    <TextBlock Text="World"> 
</Grid> 

Da WPF-Objekt nisten (Putten Dinge in anderen Objekten) kann sehr tief werden, WPF macht es viel einfacher zu lesen als der resultierende C# -Code.

Zur Trennung von Bedenken: XAML hilft auch hier, da es Ihnen nur erlaubt, Objekte und ihre Beziehungen/Eigenschaften, anstatt Logik auszudrücken. Das zwingt Sie, Logik vom UI-Layout zu trennen. Das MVVM-Pattern eignet sich sehr gut für diese Aufgabe und ermöglicht E-Testbarkeit und austauschbare Ansichten.

Zusätzliche Komplexität in XAML kann auch leicht verworfen werden, da der gleiche Code in C# leicht komplexer als das XAML-Markup wird.

Ich kann Ihnen jedoch keinen Einblick in QTQuick geben. Sorry

+1

Sind Sie sich sicher? Mein Verständnis war, dass XAML in ein intermediäres Binärformat (BAML) kompiliert wurde. Eine schnelle Google scheint zu bestätigen, dass dies der Fall ist: http://blogs.microsoft.co.il/blogs/tomershamam/archive/2007/05/25/Compiled-XAML-_3D00_-BAML-not-IL.aspx –

+0

Verdammt, du hast Recht. Ich werde die Antwort sofort bearbeiten. Ich dachte, sie machen die Deserialisierung nach IL (ich habe meine Annahme auf WPF Unleashed gestützt, wo sie erklären, dass XAML nur ein Serialisierungsformat für C# -Objekte ist). Ich denke, MS hat gute Gründe, es zu baml zu kompilieren (immer noch ein kompiliertes Binärformat, wenn ich es richtig verstehe) und nicht ein XML-Format, das geparst werden muss. Aber Sie haben Recht, es ist ein bisschen langsamer als reine IL. – Tigraine

7

Der Punkt der deklarativen Codierung, d. H. WPF oder QTQuick, ist eine Trennung zwischen dem Entwickler und vermutlich dem Künstler, der die visuellen Aspekte Ihrer Anwendung implementiert. In Bezug auf WPF finde ich, dass das Debuggen etwas schwieriger wird. Während wir sprechen, erstelle ich das neueste QT, um QTQuick zu betrachten. (Es dauert sehr lange und ich habe Zeit, stackoverflow zu sehen :-)) Also, ich habe noch keine Meinung dazu.

+0

Wie wird das Debuggen schwieriger? Ich stimme zu, dass Ausnahmen, die Sie erhalten, ein wenig schwieriger zu debuggen sind, aber diese sollten nicht passieren, sondern von Ihrem Code behandelt und von Ihren Komponententests abgedeckt werden. Der ganze Sinn von WPF + MVVM besteht darin, die GUI-Logik testbar zu machen, ohne dass ein Debugging erforderlich ist. – Tigraine

+0

In der Theorie ja. Wenn Sie jedoch Ihren Code und die Benutzeroberfläche zusammenfügen, werden Ausnahmen scheinbar aus dem Benutzeroberflächencode entfernt, wenn das Problem tatsächlich in Ihrer Geschäftslogik auftritt. Ich finde, dass der Compiler auch verwirrt und Fehlerspeicherorte falsch berichtet. Ich denke, dass nur Erfahrung diese Art von Problemen überwindet. – Michael

+0

@Tigraine, Debuggen, weil WPF viel Arbeit in Hintergrundthreads macht. Wenn einer dieser Threads eine Exception auslöst, erhalten Sie nur einen Stacktrace, der die Ursache des Fehlers identifiziert. – mikerobi

8

QtQuick ist erweiterbar über C++ - Plugins, was die Qt-Leute empfehlen, dass Sie die Benutzeroberfläche, Animationen, Übergänge etc. in QtQuick/QML machen, während Ihre Geschäftslogik in C++/Qt ist. Auf diese Weise erhalten Sie das Beste aus beiden Welten. Sie können Ihren C++ - Code wie gewohnt debuggen und gleichzeitig UIs mühelos und extrem einfach erstellen.

Eine weitere wichtige Überlegung über QtQuick/XAML ist, dass sie hardwarebeschleunigt sind, so dass Sie z. B. ziemlich gute fps ohne Aufwand erhalten können. Sie sind also überhaupt nicht langsam für das, was sie erreichen wollten.

Es spart Zeit, soo viel Zeit. Ich habe in 3 Tagen eine Benutzeroberfläche mit Code erstellt, in 2 Stunden dasselbe in QML.

+0

bin nicht sicher, qt schnell ist hardwarebeschleunigt. Zeigen Sie mir einen Link –

+1

Die einfache Tatsache, die Fliese Demo-Animation auf einem 3 Jahre alten Nokia-Handy starten und sehen, wie glatt es ist beweist es Hardware :) –

+1

RémyDAVID beschleunigt ist: QML könnte immer sein Hardware-Beschleunigung zu verwenden, da ein 3 Jahre altes Nokia Telefon hatte keine Hardware, um Grafiken zu beschleunigen, QML konnte dir dort nicht helfen. DrDeo hier sind einige Links: http://developer.qt.nokia.com/wiki/Support_for_Symbian http://labs.qt.nokia.com/2011/10/03/chasing-the-raspberry-pi -dragon-opengl-es2-beschleunigte-qt-pi/ http: // juhaturunen.com/blog/2010/12/how-to-enable-hardware-beschleunigte-qml-rendering/ http://www.raspberrypi.org/ hat einige videos von QML hw beschleunigt auf dem 25 $ board –

5

QML/XAML ist:

  • Groß für MVVM Muster
  • Hardware (QML beschleunigt mit der Verwendung von OpenGL für Windows, MAC, Linux und Telefon OSes ... XAML mit DirectX für Windows und sein Telefon Version)
  • Näher an Künstler
  • Sie können eine große und NICE UI mithilfe von XAML/QML erstellen
  • Einfachere UI Implementierung
  • Nizza Animation ist möglich
  • In XAML, in der Regel können Sie eine Silverlight-Version Ihrer Anwendung erstellen, mit ein wenig Änderungen
  • In XAML gibt es einige großartige Funktionen wie Template ist, Trigger (Datatrigger, Trigger, Eventtrigger), Bindung (auf jeder Seite und auch auf beiden Seiten zusammen), Resource, Commands, DependencyProperty und Notified Properties.

Aber bitte beachten Sie, in XAML: (Ich bin ein XAML-Programmierer, daher habe ich keine Punkte für QML)

  • XAML Debuggen nicht möglich ist
  • Für jede Änderung in XAML, alle Programm muss rekompilieren
  • Seien Sie vorsichtiger für die Leistung. Wenn Sie zum Beispiel sehr viele RoutedCommands in XAML verwenden, wird Ihre Anwendung unbrauchbar sein!

  • In XAML funktionieren einige Features nicht wie erwartet. Es gibt leider ein paar Tricks. (Es sollte klar sein ... sollte wie erwartet funktionieren, oder?)

  • Seien Sie vorsichtig bei einigen ähnlichen Namespaces wie BitmapEffect und Effect. Es gibt verschiedene Funktionen und Kosten. (z. B. BitmapEffect hat einige Effekte mit Software-Rendering und Effekt hat einige Auswirkungen mit Hardware-Rendering)

  • In der realen Welt konnten Künstler WPF nicht als Flash verwenden (zumindest mit guter Leistung).

  • arbeitet einige Funktionen auf besondere Orte. Zum Beispiel funktioniert DataTrigger nur im Style-Tag nicht im Resource-Bereich.

  • Es gibt einige Schwächen in XAML. Einige Beispiele: Es gibt keine sequentielle Animation ... Sie können keine Berechnungen in XAML durchführen (Sie müssen einen Konverter in C# schreiben, selbst für eine kleine Arbeit! JavaSript ist ein guter Ersatz in QML) ... einige Attribute sind doppelt vorhanden. z.B. x: Name und Name ... Die Steuerung von ViewModel ist nicht klar. z.B.

  • tooooooo viel Laufzeitfehler Schließen Ansicht von Viewmodel (müssen Sie einige Codebehind). Wenn Sie einige Tags an einem falschen Ort verwenden, werden Sie auf einen Syntaxfehler hingewiesen, viele Fehler treten jedoch nur zur Laufzeit auf. z.B. Wenn ich die Hintergrundeigenschaft (anstelle von Background.Color) für ColorAnimation anvisiere, wird es erfolgreich kompiliert, aber in laufender Animation ... BUMP ... Laufzeitfehler !!! In diesem Fall wird bei Expression Blend die Anwendung abstürzen !!!