Qt & QML Development
2024-12-23
6 Minuten Lesezeit

Qt Graphs vs. Qt Charts: Objektive Einschätzung der neuen Datenvisualisierungslösung

Bartosz Rudzki
Bartosz Rudzki Software Developer

Qt Graphs ist ein leistungsstarkes Modul des Qt-Frameworks, das Entwicklern die Erstellung interaktiver, sowohl statischer als auch dynamischer 2D-Diagramme und 3D-Datenvisualisierungen ermöglicht. Auf den ersten Blick mag es keine bahnbrechende Neuerung darstellen, da diese Funktionalität bereits in früheren Qt-Modulen wie Qt Charts und Qt Data Visualization vorhanden war. Dennoch fasst es diese Funktionen zusammen und führt zahlreiche Verbesserungen und Erweiterungen ein, sowohl im Hintergrund als auch in sichtbarer Form.

Mit der aktuellen Veröffentlichung von Qt 6.8 hat das Graphs-Modul offiziell den Tech-Preview-Status verlassen. In diesem Blogbeitrag werfen wir einen genaueren Blick darauf, was sich geändert hat, warum diese Änderungen vorgenommen wurden und welche Auswirkungen sie auf das Leben eines Qt-Entwicklers haben.

Falls Ihr Projekt von eleganten und dynamischen Visualisierungen profitieren könnte, besuchen Sie unsere Seite Qt-Entwicklungsdienstleistungen, um zu erfahren, wie wir Ihnen helfen können.

Qt Graphs vs. Qt Charts & Qt Data Visualization – Warum wird das neue Modul benötigt?

Die ersetzten Module stammen aus der frühen Qt-5-Ära. Im Laufe der Jahre wurde der Bedarf an besserer Leistung immer deutlicher, da moderne Anwendungen eine effizientere Renderleistung und größere Flexibilität erfordern.

Rendering-Verbesserung

Die Rendering-Engine in Qt Data Visualization, die auf OpenGL basiert, musste auf Geräten mit OpenGL ES 2 laufen, was den Zugriff auf erweiterte OpenGL-Funktionen einschränkte. Zudem erzwang sie die Verwendung von OpenGL für UI-Komponenten, was auf bestimmten Plattformen, wie Windows mit seinem nativen Direct3D, zu einer suboptimalen Leistung führen konnte.

Das Qt-Charts-Modul hingegen basiert auf dem Qt Graphics View Framework und ist daher eng mit dem Widget-Framework verbunden. Dies führte in vielen Fällen zu softwarebasiertem Rendering, was die Effizienz zusätzlich beeinträchtigte.

Qt Graphs behebt viele dieser Probleme. Das 3D-Modul basiert auf Qt Quick 3D und nutzt Qt RHI (Qt Rendering Hardware Interface), um das optimale Rendering-Backend für die jeweilige Zielplattform zu verwenden, einschließlich Direct3D, Vulkan oder Metal. Das 2D-Modul von Qt Graphs verwendet hingegen das Quick-Framework und profitiert daher von hardwarebeschleunigtem Rendering . Diese Kombination verbessert sowohl die Leistung als auch die Flexibilität erheblich. 

Kombination von 2D- und 3D-Funktionalität

Ein weiterer Grund für die Einführung des neuen Moduls war die bisherige Trennung zwischen 2D- und 3D-Datenvisualisierung. Qt Graphs vereint das Qt Charts-Modul (2D) und das Qt Data Visualization-Modul (3D) in einem einzigen Modul, was bereits für sich genommen eine praktische Verbesserung darstellt. Falls eine solche Trennung dennoch erforderlich ist, beispielsweise bei der Arbeit mit einem eingebetteten Gerät mit begrenzten Ressourcen, gibt es Möglichkeiten, das Modul nur mit 2D- oder 3D-Unterstützung zu erstellen.

Zusätzliche Funktionen

Interessanterweise bringt die Verwendung von Qt Quick 3D für die Implementierung von Qt Graphs auch neue Funktionen mit sich. Es ist nun nicht nur möglich, QQuick3D-Elemente einfach in Diagramme zu integrieren , sondern auch die Qt Quick 3D-Szene durch die Definition einer SceneEnvironment oder ExtendedSceneEnvironment in der Umgebungseigenschaft zu erweitern. Dadurch kann konfiguriert werden, wie eine Szene gerendert wird , einschließlich Lichtsteuerung, Hintergrundkonfiguration, Nebeleffekte, Tone Mapping und verschiedenen Post-Processing-Effekten.

Darüber hinaus können wir eine Quick 3D-Szene importieren , indem wir ein Node-Element der Eigenschaft importScene zuweisen. Ein Node-Objekt stellt eine Entität innerhalb der 3D-Szene dar und dient als Basisklasse für andere räumliche Typen wie Model, Camera und Light. Dies eröffnet unbegrenzte Möglichkeiten zur individuellen Anpassung der Diagrammszenen.

Ich könnte noch weiter ins Detail gehen, aber um es kurz zu halten, hier eine Zusammenfassung der weiteren Änderungen:

  • Vereinfachte Eingabeverarbeitung : Mehrere Eingabe-Handler (QAbstract3DInputHandler, QInput3DHandler, QTouch3DInputHandler) wurden in einem einzigen QGraphsInputHandler zusammengeführt. Auf der 2D-Seite werden QuickItem-Ereignisse nun direkt verarbeitet, wodurch die Notwendigkeit der Ereignisübersetzung von QuickItem zur Grafikszene entfällt.

  • Verbesserte Datenverarbeitung : Die API erfordert keine Heap-zugewiesenen Datenarrays mehr. Durch Move-Semantik werden unnötige Kopien vermieden. Proxies speichern keine Daten mehr, sondern leiten sie direkt an die Serien weiter.

  • Widget-Kompatibilität : Widgets können weiterhin verwendet werden, allerdings muss anstelle eines normalen QWidget ein QQuickWidget eingesetzt werden.

  • Überarbeitung der Themes : Q3DTheme wurde durch QGraphsTheme ersetzt, das in zwei logische Teile unterteilt ist: Theme und Farbschema. Die Farbschemata wurden modernisiert und bieten nun helle, dunkle und automatische Optionen.

  • Transparenz : Wird jetzt sowohl in Bars3D als auch Scatter3D unterstützt.

  • Optimiertes Rendering : Modell-Instanziierung wurde für 3D-Balken- und Streudiagramme eingeführt, was eine effiziente Darstellung großer Datensätze ermöglicht. Bei Oberflächendiagrammen wird die Vertex-Positionierung nun durch den Vertex-Shader direkt von der GPU übernommen.

Fazit

Zusammenfassend bietet das Qt Graphs-Modul eine einfache und effiziente Möglichkeit für Qt-Entwickler, Datenpunkte sowohl in Widget- als auch in QML-Anwendungen zu visualisieren. Trotz einiger fehlender Funktionen vereinfacht es bereits den Arbeitsablauf, reduziert Abhängigkeiten, verbessert die Leistung und führt neue Funktionen ein – ein wertvolles Werkzeug zur Gestaltung moderner Benutzeroberflächen.

Was fehlt im neuen Qt Graphs im Vergleich zu Qt Charts?

<meckern>

Um nicht nur alles in rosigen Farben darzustellen, muss ich zugeben, dass einige Funktionen der vorherigen Module bislang noch keinen Platz im neuen gefunden haben.

Was beim Erstellen eines Diagramms – sei es 2D oder 3D – sofort auffällt, ist das Fehlen von Legenden und Titeln. Während das Fehlen eines Diagrammtitels relativ einfach umgangen werden kann, bedeutet das Fehlen einer integrierten Legende einen erheblichen Mehraufwand, um eine datenbezogene Visualisierung in einen passenden Kontext zu setzen.

Das GraphsTheme scheint noch nicht vollständig ausgereift zu sein – es beeinflusst das Erscheinungsbild des Diagramms nicht immer wie erwartet.

Einige Diagramm-Eigenschaften funktionieren entweder nicht oder verhalten sich anders als in der Dokumentation beschrieben.

Apropos Dokumentation: Sie könnte an manchen Stellen ausführlicher sein, und es wäre hilfreich, wenn alle Hyperlinks vollständig und funktional wären. Es kam ein- oder zweimal vor, dass ich direkt in den Quellcode schauen musste, um mögliche Enum-Werte zu finden, da die zugehörige Tabelle in der Dokumentation nicht zugänglich war.

Der Quellcode selbst hat in meiner Erfahrung mit Qt Graphs eine aufklärende Rolle gespielt – beispielsweise, wenn ein Signal existierte, aber nicht in der Dokumentation erwähnt wurde, oder wenn eine Methode, die laut Dokumentation existieren sollte, in Wirklichkeit gar nicht vorhanden war.

</meckern>

Insgesamt gibt es einige in der Dokumentation als bekannte Probleme oder fehlende Funktionen aufgeführte Punkte, die in der Qt 6.8-Version noch nicht implementiert wurden. Dazu gehören bestimmte Typen von 2D-Diagrammen, die bereits erwähnten Titel und Legenden, Schatten- und Transparenzeffekte bei Surface 3D, sowie die Transparenz von hervorgehobenen Elementen in Bars 3D und Scatter 3D – und noch einige weitere Punkte.

Es ist jedoch wichtig zu bedenken, dass das Modul gerade erst veröffentlicht wurde . Die Entwicklung wird sicherlich nicht hier aufhören, und es ist zu erwarten, dass die Qt-Community und die Entwickler viele dieser fehlenden Features in zukünftigen Versionen ergänzen werden.

Benutzerdefinierte Qt Graphs-Beispiele

Im Folgenden sind einige Beispiele dafür aufgeführt, was mit dem neuen Modul möglich ist. Vieles davon wäre mit Qt Charts nicht umsetzbar.

Scatter 2D

Ein einfaches Diagramm mit einem statischen Datensatz und einem benutzerdefinierten Punkt-Delegate.

2D scatter graph

Bar 2D

Ausgabenbalken, die ihre entsprechenden Einnahmenbalken übersteigen, werden markiert. Eine On-Appearance-Animation wurde als zusätzlicher Effekt hinzugefügt.

2D bar graph

Area 2D

Ein statisches Flächendiagramm. Das Erstellen einer optisch ansprechenden Datenpräsentation war schwieriger, als ich dachte.

2D area graph

Dynamisch Spline 2D

Ein Spline-Diagramm mit dynamisch hinzugefügten Punkten und einem benutzerdefinierten Punkt-Delegate. Verwendet GraphPoint- und SplineControl-Animationen. Ehrlich gesagt scheint es unter bestimmten Bedingungen etwas fehlerhaft zu sein, aber mit der richtigen Behandlung liefert es ein durchaus ansehnliches Ergebnis.

2D dynamic spline graph

Surface 3D

Das Diagramm profitiert von den Glow -Eigenschaften des ExtendedSceneEnvironment.

A 3D sufrace graph with a bit of a Quick3D glow

Bars 3D

Dieses Beispiel war besonders interessant: Eine Kugel wurde als Model innerhalb eines Node-Objekts hinzugefügt, das der Eigenschaft importScene zugewiesen wurde. Die „Disco-Vibes“ stammen von dem Lens-Flare -Effekt des ExtendedSceneEnvironment.

A 3D bar graph with Quick3D scene imported

Fazit

Zusammenfassend bietet das Qt Graphs-Modul eine einfache und effiziente Möglichkeit für Qt-Entwickler, Datenpunkte in Widget- und QML-Anwendungen zu visualisieren. Trotz einiger noch fehlender Funktionen vereinfacht es bereits jetzt Arbeitsabläufe, reduziert Abhängigkeiten, verbessert die Leistung und führt neue Features ein – ein wertvolles Werkzeug für die Erstellung moderner Benutzeroberflächen.

Ähnliche beiträge

IoT
2025-08-20

IoT-Geräteauthentifizierung: Warum sie wichtig ist und wie man sie implementiert

Da das Internet der Dinge (IoT) allgegenwärtig wird, sind mittlerweile Milliarden von verbundenen IoT-Geräten mit den Netzwerken verbunden – von intelligenten Thermostaten und Fabriksensoren bis hin zu Insulinpumpen und Fahrzeug-ECUs. Doch mit dieser Konnektivität kommt auch ein Risiko: Wie wissen Sie, ob das Gerät, mit dem Sie sprechen, echt ist, und kein bösartiger Klon oder ein kompromittierter Knoten? Genau hier kommt die IoT-Geräteauthentifizierung ins Spiel.
Michał Woźniak
Michał Woźniak Software Developer
FinTech
2025-08-18

FIX-Engine-Integration in Finanzsysteme: Ein umfassender Leitfaden

Financial Information eXchange (FIX) ist der weltweite Standard für den elektronischen Handel. Von Aktien bis zu Devisen ermöglicht FIX es Systemen auf den Kapitalmärkten, Aufträge, Ausführungen und Marktdaten in Echtzeit auszutauschen. Obwohl das Protokoll standardisiert ist, stellt die Integration in reale Systeme sowohl eine technische als auch eine geschäftliche Herausforderung dar.
Jakub Wincenciak
Jakub Wincenciak Head of Operations
Cybersecurity
2025-08-06

Codeabdeckung vs. Testabdeckung: Metriken, die für Compliance und Qualität entscheidend sind

Die Sicherstellung hoher Qualität und regulatorischer Konformität in qualitätsorientierten Branchen erfordert rigorose Softwaretests und Validierung. Zu den wichtigsten Kennzahlen zur Bewertung der Testeffektivität gehören Codeabdeckung und Testabdeckung. Obwohl eng miteinander verwandt, haben diese Begriffe unterschiedliche Bedeutungen und Implikationen.
Michał Woźniak
Michał Woźniak Software Developer

Kontaktieren Sie uns

Wir beantworten jede Anfrage und finden die optimale Strategie für den Erfolg Ihres Projekts.

Füllen Sie das Formular aus, und wir melden uns in Kürze bei Ihnen.

Lukas Kosiński

Lukas Kosiński

Chief Executive Officer

Der Administrator der personenbezogenen Daten ist Somco Software sp. z o.o., ul. Gen. Ottokara Brzoza-Brzeziny 13, 05-220 Zielonka, KRS: 855688. Die personenbezogenen Daten werden verarbeitet, um die im Kontaktformular gestellte Anfrage zu beantworten. Weitere Informationen, einschließlich einer Beschreibung der Rechte der betroffenen Personen, finden Sie in der Datenschutzerklärung.