Qt Graphs Übersicht für 3D
Das Modul Qt Graphs ermöglicht die Entwicklung schnell reagierender, komplexer und dynamischer 3D-Diagramme für analytisch anspruchsvolle Branchen wie die akademische Forschung und die Medizin. Qt Graphs bietet 3D-Balken-, Streu- und Oberflächendiagramme. Die Kombination von Benutzerinteraktion und Echtzeit-3D-Diagrammen ermöglicht die Erstellung von Benutzeroberflächen, die den Raum effektiv nutzen. Durch den Wechsel zwischen 3D- und 2D-Darstellung kann der Wert von 3D bei der Visualisierung von Daten voll ausgeschöpft werden.
Das Aussehen der Diagramme kann durch die Verwendung der vordefinierten Themen oder die Definition neuer Themen angepasst werden. Darüber hinaus können Szenen durch Angabe von Einstellungen für die Kamera und einzelne Elemente durch Verwendung vordefinierter oder benutzerdefinierter Netze angepasst werden.
Qt Graphs bietet fertige Daten-Proxys, die zur Visualisierung von Daten aus Qt-Elementmodellen und Höhenkarten verwendet werden können. Jeder Diagrammtyp verfügt über einen grundlegenden Proxy-Typ, der Daten in einem für das jeweilige Diagramm geeigneten Format annimmt. Weitere Informationen finden Sie unter Qt Graphs Datenverarbeitung mit 3D.
Endbenutzer können auf verschiedene Weise mit den in Diagrammen dargestellten Daten interagieren, z. B. durch Drehen von Diagrammen, Vergrößern und Verkleinern von Daten, Auswählen von Elementen und Anzeigen von 2D-Slices der 3D-Daten zur besseren Lesbarkeit. Weitere Informationen finden Sie unter Qt Graphs Interaktion mit Daten in 3D.
Diagrammtypen
Das Modul Qt Graphs bietet die folgenden 3D-Diagrammtypen:
Die Klasse Q3DGraphsWidgetItem bietet eine Widget-API für ihre eigenen Unterklassen Q3DBarsWidgetItem, Q3DScatterWidgetItem und Q3DSurfaceWidgetItem, die die verschiedenen Diagrammtypen implementieren: Balken, Streuung und Oberfläche. Der Diagrammtyp bestimmt, wie die Daten dargestellt werden.
Das gesamte Rendering erfolgt in QQuickGraphsItem
, das von QQuick3DViewport
erbt, das wiederum View3D mit QtQuick3D anbietet. Es hat seine eigenen Unterklassen für Bars3D, Scatter3D und Surface3D.
3D-Balkendiagramme
3D-Balkendiagramme stellen Daten als 3D-Balken dar, die nach Kategorien gruppiert sind. Die Klasse Q3DGraphsWidgetItem wird verwendet, um ein Diagramm zu erstellen. Die Klassen QBar3DSeries und QBarDataProxy werden verwendet, um dem Diagramm Daten zuzuweisen und die visuellen Eigenschaften des Diagramms zu steuern, z. B. den Zeichenmodus und die Schattierung. In QML lauten die entsprechenden Typen Bars3D, Bar3DSeries und BarDataProxy.
Weitere Informationen finden Sie unter How to construct a minimal Q3DBarsWidgetItem graph und Beispiele für einfache Balkendiagramme.
3D-Punktdiagramme
3D-Punktediagramme stellen Daten als eine Sammlung von Punkten dar. Die Klasse Q3DScatterWidgetItem wird zur Erstellung eines Diagramms verwendet. Die Klassen QScatter3DSeries und QScatterDataProxy werden verwendet, um dem Diagramm Daten zuzuweisen und die visuellen Eigenschaften des Diagramms zu steuern. In QML lauten die entsprechenden Typen Scatter3D, Scatter3DSeries und ScatterDataProxy.
Weitere Informationen finden Sie unter How to construct a minimal Q3DScatterWidgetItem graph und Beispiele für einfache Streudiagramme.
3D-Oberflächendiagramme
3D-Oberflächendiagramme stellen Daten als 3D-Oberflächenplots dar. Die Klasse Q3DSurfaceWidgetItem wird zur Erstellung eines Diagramms verwendet. Die Klassen QSurface3DSeries und QSurfaceDataProxy werden verwendet, um dem Diagramm Daten zuzuweisen und die visuellen Eigenschaften des Diagramms zu steuern. In QML lauten die entsprechenden Typen Surface3D, Surface3DSeries und SurfaceDataProxy.
Weitere Informationen finden Sie in den Beispielen How to construct a minimal Q3DSurfaceWidgetItem graph, Graph Gallery und Surface Graph Gallery.
Verwendung von OpenGL ES zum Rendern von Daten
Qt Graphs basiert auf QtQuick3D, d.h. Qt Graphs verwendet das native Backend der Zielplattform für das Rendering. Wenn OpenGL ES2 jedoch in Zielplattformen verwendet wird, die keine höheren Versionen wie OpenGL ES3 oder Vulkan unterstützen, werden die folgenden Funktionen nicht unterstützt:
- Volumetrische Objekte, da sie 3D-Texturen verwenden
- Instancing, das bedeutet, dass QtGraphs3D::OptimizationHint::Default nicht funktioniert und stattdessen QtGraphs3D::OptimizationHint::Legacy verwendet werden muss.
Auswahl des Rendering-Modus
In QML können Sie mit der Eigenschaft GraphsItem3D.RenderingMode festlegen, ob das Diagramm direkt auf dem Fensterhintergrund oder auf einer Oberfläche außerhalb des Bildschirms gerendert wird, die dann während des normalen Renderings der QML-Elemente gezeichnet wird.
Hintergrund-Rendering-Modi bieten eine etwas bessere Leistung als der indirekte Rendering-Modus, allerdings auf Kosten eines nicht standardmäßigen QML-Verhaltens. Die Graphen unterstützen zum Beispiel kein Antialiasing. Daher ist der Wechsel des Rendering-Modus eine Frage von Leistung und Qualität.
Qt Quick Der Modus "Indirektes Rendering" verwendet einen eigenen Szenegraphen für das Rendering von Daten und ist daher die beste Wahl für Graphen.
3D-Achsen
Qt Graphs unterstützt die folgenden Achsentypen:
- Werteachse
- Kategorie-Achse
Eine Achse kann so eingerichtet werden, dass sie eine Linie oder ein Gitter anzeigt. Beide Achsentypen sind Spezialisierungen der Klasse QAbstract3DAxis oder des QML-Typs Abstract3DAxis.
Für eine Wertachse können Sie einen Wertebereich und die Anzahl der Segmente und Untersegmente festlegen, um den Bereich zu unterteilen. Standardmäßig werden zwischen den einzelnen Segmenten Beschriftungen gezeichnet. Standardmäßig werden Gitternetzlinien zwischen jedem Segment und jedem Untersegment gezeichnet. Die Wertachse wird mit der Klasse QValue3DAxis oder dem QML-Typ Value3DAxis implementiert.
Eine Kategorieachse hat benannte Bereiche und einstellbare Bereichsbreiten. Sie ist in gleich große Kategorien unterteilt, basierend auf der durch den Achsenbereich definierten Datenfenstergröße. Beschriftungen werden standardmäßig an den Positionen der Kategorien gezeichnet, sofern vorhanden. Standardmäßig werden Gitternetzlinien zwischen den Kategorien gezeichnet. Eine Kategorieachse wird mit der Klasse QCategory3DAxis oder dem QML-Typ Category3DAxis implementiert.
Wenn für ein Diagramm keine Achsen explizit festgelegt werden, werden temporäre Standardachsen ohne Beschriftung erstellt. Diese Standardachsen können über Achsenzugriffsfunktionen geändert werden, aber sobald eine Achse explizit für eine bestimmte Ausrichtung festgelegt wird, wird die Standardachse für diese Ausrichtung zerstört.
Alle Diagrammtypen unterstützen die gleichzeitige Darstellung mehrerer Serien. Die Serien müssen nicht alle die gleiche Anzahl von Zeilen und Spalten enthalten. Die Zeilen- und Spaltenbeschriftungen werden von der ersten hinzugefügten Serie übernommen, sofern sie nicht explizit für die Zeilen- und Spaltenachsen definiert sind.
Achsenformatierer können verwendet werden, um die Linien und Beschriftungen des Wertachsengitters anzupassen. Die Klasse QValue3DAxisFormatter und der QML-Typ Value3DAxisFormatter bieten Formatierungsregeln für eine lineare 3D-Wertachse. Die Klasse QLogValue3DAxisFormatter und der QML-Typ LogValue3DAxisFormatter bieten Formatierungsregeln für eine 3D-Achse mit logarithmischen Werten.
Polare horizontale Achsen können für Oberflächen- und Streudiagramme verwendet werden, indem die Eigenschaft polar gesetzt wird. Sie kann auch für Balken gesetzt werden, aber dies führt zu einer Warnung und wird ignoriert.
Anpassen von 3D-Szenen
Da Qt Graphs auf QtQuick3D aufbaut, ist es möglich, QtQuick3D Szenen in Qt Graphs Szenen zu integrieren. Weitere Informationen finden Sie unter Qt Graphs Integration mit Qt Quick 3D.
Elemente anpassen
Qt Graphs verfügt über vordefinierte Netztypen für Balken und Streuelemente. Der Netztyp bestimmt, wie ein Balken oder ein Streuungselement in einem Diagramm aussieht. Sie können auch eine benutzerdefinierte Geometrie als Netzdatei angeben. Weitere Informationen finden Sie unter QAbstract3DSeries::userDefinedMesh(). Für mehr Abwechslung kann ein Quaternion für die Maschendrehung festgelegt werden.
Zusätzlich zum Anpassen einzelner Elemente können Sie die Klasse QCustom3DItem oder den QML-Typ Custom3DItem verwenden, um benutzerdefinierte Elemente zu Diagrammen hinzuzufügen. Die Elemente verfügen über ein benutzerdefiniertes Netz, Position, Skalierung, Drehung und eine optionale Textur.
Verwenden Sie die Klasse QCustom3DVolume und den QML-Typ Custom3DVolume, um volumengerenderte Objekte zu erstellen, die einem Diagramm hinzugefügt werden. Ein volumengerendertes Objekt ist ein Kasten mit einer 3D-Textur. Für das Volumen werden drei Slicing-Ebenen unterstützt, eine entlang jeder Hauptachse des Volumens.
Die Klasse QCustom3DLabel und der QML-Typ Custom3DLabel implementieren benutzerdefinierte Etiketten mit dem angegebenen Text, der Schriftart, der Position, der Skalierung und der Drehung. Das aktive Thema bestimmt die Farben, den Rahmen und den Hintergrund der Beschriftung.
Behandlung von benutzerdefinierten Eingaben
Qt Graphs implementiert Standard-Eingabehandler für typische Aktionen wie Auswählen, Drehen und Zoomen. Um benutzerdefinierte Eingabehandler anstelle der Standardhandler zu implementieren, überschreiben Sie die erforderlichen Eingabesignale.
onTapped: { // Disable the default input handler unsetDefaultTapHandler() // Implement own custom event handler console.log("Custom tap event handler") }
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.