Q3DSurface Class
Die Klasse Q3DSurface bietet Methoden zum Rendern von 3D-Oberflächenplots. Mehr...
Kopfzeile: | #include <Q3DSurface> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS DataVisualization) target_link_libraries(mytarget PRIVATE Qt6::DataVisualization) |
qmake: | QT += datavisualization |
Since: | QtDataVisualization 1.0 |
Vererbt: | QAbstract3DGraph |
Eigenschaften
|
Öffentliche Funktionen
Q3DSurface(const QSurfaceFormat *format = nullptr, QWindow *parent = nullptr) | |
virtual | ~Q3DSurface() |
void | addAxis(QValue3DAxis *axis) |
void | addSeries(QSurface3DSeries *series) |
QList<QValue3DAxis *> | axes() const |
QValue3DAxis * | axisX() const |
QValue3DAxis * | axisY() const |
QValue3DAxis * | axisZ() const |
bool | flipHorizontalGrid() const |
void | releaseAxis(QValue3DAxis *axis) |
void | removeSeries(QSurface3DSeries *series) |
QSurface3DSeries * | selectedSeries() const |
QList<QSurface3DSeries *> | seriesList() const |
void | setAxisX(QValue3DAxis *axis) |
void | setAxisY(QValue3DAxis *axis) |
void | setAxisZ(QValue3DAxis *axis) |
void | setFlipHorizontalGrid(bool flip) |
Signale
void | axisXChanged(QValue3DAxis *axis) |
void | axisYChanged(QValue3DAxis *axis) |
void | axisZChanged(QValue3DAxis *axis) |
void | flipHorizontalGridChanged(bool flip) |
void | selectedSeriesChanged(QSurface3DSeries *series) |
Detaillierte Beschreibung
Diese Klasse ermöglicht es Entwicklern, 3D-Oberflächenplots zu rendern und diese durch freie Drehung der Szene zu betrachten. Die visuellen Eigenschaften der Oberfläche wie Zeichenmodus und Schattierung können über QSurface3DSeries gesteuert werden.
Die Q3DSurface unterstützt die Auswahl, indem sie eine hervorgehobene Kugel auf dem Datenpunkt anzeigt, auf den der Benutzer mit der linken Maustaste geklickt hat (wenn der Standard-Eingabehandler verwendet wird) oder der über QSurface3DSeries ausgewählt wurde. Der Auswahlzeiger wird von einer Beschriftung begleitet, die im Standardfall den Wert des Datenpunktes und die Koordinaten des Punktes anzeigt.
Der Wertebereich und das auf der Achse angezeigte Beschriftungsformat können über QValue3DAxis gesteuert werden.
Um das Diagramm zu drehen, halten Sie die rechte Maustaste gedrückt und bewegen Sie die Maus. Das Zoomen erfolgt mit dem Mausrad. In beiden Fällen wird davon ausgegangen, dass der Standard-Eingabe-Handler verwendet wird.
Wenn keine Achsen explizit auf Q3DSurface gesetzt werden, werden temporäre Standardachsen ohne Beschriftung erstellt. Diese Standardachsen können über Achsenzugriffe verändert werden, aber sobald eine Achse explizit für die Orientierung gesetzt wird, wird die Standardachse für diese Orientierung zerstört.
So konstruiert man einen minimalen Q3DSurface-Graphen
Konstruieren Sie zunächst Q3DSurface. Da wir den Graphen in diesem Beispiel als Top-Level-Fenster ausführen, müssen wir das Qt::FramelessWindowHint
-Flag löschen, das standardmäßig gesetzt wird:
Q3DSurface surface; surface.setFlags(surface.flags() ^ Qt::FramelessWindowHint);
Nun ist Q3DSurface bereit, Daten zu empfangen, die gerendert werden sollen. Erstellen Sie Datenelemente, um Werte zu empfangen:
QSurfaceDataArray *data = new QSurfaceDataArray; QSurfaceDataRow *dataRow1 = new QSurfaceDataRow; QSurfaceDataRow *dataRow2 = new QSurfaceDataRow;
Füttern Sie zunächst die Zeilenelemente mit den Daten und fügen Sie dann ihre Zeiger zum Datenelement hinzu:
*dataRow1 << QVector3D(0.0f, 0.1f, 0.5f) << QVector3D(1.0f, 0.5f, 0.5f); *dataRow2 << QVector3D(0.0f, 1.8f, 1.0f) << QVector3D(1.0f, 1.2f, 1.0f); *data << dataRow1 << dataRow2;
Erstellen Sie eine neue Reihe und fügen Sie ihr Daten hinzu:
QSurface3DSeries *series = new QSurface3DSeries; series->dataProxy()->resetArray(data); surface.addSeries(series);
Zum Schluss müssen Sie sie sichtbar machen:
surface.show();
Der gesamte Code, der zum Erstellen und Anzeigen dieses Diagramms benötigt wird, lautet:
#include <QtDataVisualization> int main(int argc, char **argv) { qputenv("QSG_RHI_BACKEND", "opengl"); QGuiApplication app(argc, argv); Q3DSurface surface; surface.setFlags(surface.flags() ^ Qt::FramelessWindowHint); QSurfaceDataArray *data = new QSurfaceDataArray; QSurfaceDataRow *dataRow1 = new QSurfaceDataRow; QSurfaceDataRow *dataRow2 = new QSurfaceDataRow; *dataRow1 << QVector3D(0.0f, 0.1f, 0.5f) << QVector3D(1.0f, 0.5f, 0.5f); *dataRow2 << QVector3D(0.0f, 1.8f, 1.0f) << QVector3D(1.0f, 1.2f, 1.0f); *data << dataRow1 << dataRow2; QSurface3DSeries *series = new QSurface3DSeries; series->dataProxy()->resetArray(data); surface.addSeries(series); surface.show(); return app.exec(); }
Und das ist das Ergebnis dieser wenigen Codezeilen:
Die Szene kann gedreht und gezoomt werden, und ein Oberflächenpunkt kann ausgewählt werden, um seine Position zu sehen, aber in diesem minimalen Codebeispiel ist keine weitere Interaktion vorgesehen. Sie können mehr lernen, wenn Sie sich mit den mitgelieferten Beispielen vertraut machen, z. B. dem Oberflächendiagramm.
Siehe auch Q3DBars, Q3DScatter, und Qt Data Visualization C++ Classes.
Dokumentation der Eigenschaften
axisX : QValue3DAxis*
Diese Eigenschaft enthält die aktive x-Achse.
Zugriffsfunktionen:
QValue3DAxis * | axisX() const |
void | setAxisX(QValue3DAxis *axis) |
Melder-Signal:
void | axisXChanged(QValue3DAxis *axis) |
axisY : QValue3DAxis*
Diese Eigenschaft enthält die aktive y-Achse.
Zugriffsfunktionen:
QValue3DAxis * | axisY() const |
void | setAxisY(QValue3DAxis *axis) |
Melder-Signal:
void | axisYChanged(QValue3DAxis *axis) |
axisZ : QValue3DAxis*
Diese Eigenschaft enthält die aktive Z-Achse.
Zugriffsfunktionen:
QValue3DAxis * | axisZ() const |
void | setAxisZ(QValue3DAxis *axis) |
Melder-Signal:
void | axisZChanged(QValue3DAxis *axis) |
[since QtDataVisualization 1.2]
flipHorizontalGrid : bool
Diese Eigenschaft legt fest, ob das Gitter der horizontalen Achse im oberen Teil des Diagramms und nicht im unteren Teil angezeigt werden soll.
In einigen Anwendungsfällen wird das horizontale Achsenraster größtenteils von der Oberfläche verdeckt, so dass es sinnvoller sein kann, das horizontale Achsenraster am oberen Rand des Diagramms statt am unteren Rand anzuzeigen. Ein typischer Anwendungsfall hierfür ist die Darstellung von 2D-Spektrogrammen unter Verwendung der orthoGraphic-Projektion mit einem Top-Down-Blickwinkel.
Bei false
werden das horizontale Achsenraster und die Beschriftungen auf dem horizontalen Hintergrund des Diagramms gezeichnet. Bei true
werden das horizontale Achsenraster und die Beschriftungen auf der dem horizontalen Hintergrund gegenüberliegenden Seite des Diagramms gezeichnet. Die Voreinstellung ist false
.
Diese Eigenschaft wurde in QtDataVisualization 1.2 eingeführt.
Zugriffsfunktionen:
bool | flipHorizontalGrid() const |
void | setFlipHorizontalGrid(bool flip) |
Notifier-Signal:
void | flipHorizontalGridChanged(bool flip) |
[read-only]
selectedSeries : QSurface3DSeries* const
Diese Eigenschaft enthält die ausgewählte Serie oder null.
Wenn selectionMode SelectionMultiSeries
gesetzt ist, enthält diese Eigenschaft die Serie, die den ausgewählten Punkt besitzt.
Zugriffsfunktionen:
QSurface3DSeries * | selectedSeries() const |
Benachrichtigungssignal:
void | selectedSeriesChanged(QSurface3DSeries *series) |
Member Function Dokumentation
[explicit]
Q3DSurface::Q3DSurface(const QSurfaceFormat *format = nullptr, QWindow *parent = nullptr)
Konstruiert ein neues 3D-Oberflächendiagramm mit optionalem parent Fenster und Oberfläche format.
[virtual noexcept]
Q3DSurface::~Q3DSurface()
Zerstört die 3D-Oberflächengrafik.
void Q3DSurface::addAxis(QValue3DAxis *axis)
Fügt axis zum Diagramm hinzu. Die über addAxis hinzugefügten Achsen werden noch nicht verwendet. addAxis wird lediglich verwendet, um dem Diagramm die Eigentümerschaft an axis zu übertragen. Die axis darf nicht null sein oder einem anderen Graphen hinzugefügt werden.
Siehe auch releaseAxis(), setAxisX(), setAxisY(), und setAxisZ().
void Q3DSurface::addSeries(QSurface3DSeries *series)
Fügt die series zum Diagramm hinzu. Ein Diagramm kann mehrere Reihen enthalten, hat aber nur einen Achsensatz. Wenn die neu hinzugefügte Reihe ein ausgewähltes Element angegeben hat, wird es hervorgehoben und eine vorhandene Auswahl wird gelöscht. Nur eine hinzugefügte Reihe kann eine aktive Auswahl haben.
Siehe auch QAbstract3DGraph::hasSeries().
QList<QValue3DAxis *> Q3DSurface::axes() const
Gibt die Liste aller hinzugefügten Achsen zurück.
Siehe auch addAxis().
void Q3DSurface::releaseAxis(QValue3DAxis *axis)
Gibt das Eigentum an axis an den Aufrufer zurück, wenn es zu diesem Diagramm hinzugefügt wurde. Wenn die freigegebene axis verwendet wird, wird eine neue Standardachse erstellt und aktiv gesetzt.
Wenn die Standardachse freigegeben und später wieder hinzugefügt wird, verhält sie sich wie jede andere Achse auch.
Siehe auch addAxis(), setAxisX(), setAxisY(), und setAxisZ().
void Q3DSurface::removeSeries(QSurface3DSeries *series)
Entfernt die series aus dem Diagramm.
Siehe auch QAbstract3DGraph::hasSeries().
QList<QSurface3DSeries *> Q3DSurface::seriesList() const
Gibt die Liste der zu diesem Diagramm hinzugefügten Serien zurück.
Siehe auch QAbstract3DGraph::hasSeries().
void Q3DSurface::setAxisX(QValue3DAxis *axis)
Legt axis als aktive x-Achse fest. Ruft implizit addAxis() auf, um das Eigentum an der Achse auf dieses Diagramm zu übertragen.
Wenn axis gleich Null ist, wird eine temporäre Standardachse ohne Beschriftung und mit einem sich automatisch anpassenden Bereich erstellt.
Diese temporäre Achse wird zerstört, wenn eine andere Achse explizit auf dieselbe Ausrichtung gesetzt wird.
Hinweis: Setter-Funktion für die Eigenschaft axisX.
Siehe auch axisX(), addAxis(), und releaseAxis().
void Q3DSurface::setAxisY(QValue3DAxis *axis)
Legt axis als aktive y-Achse fest. Ruft implizit addAxis() auf, um das Eigentum an der Achse auf dieses Diagramm zu übertragen.
Wenn axis gleich Null ist, wird eine temporäre Standardachse ohne Beschriftung und mit einem sich automatisch anpassenden Bereich erstellt.
Diese temporäre Achse wird zerstört, wenn eine andere Achse explizit auf dieselbe Ausrichtung gesetzt wird.
Hinweis: Setter-Funktion für die Eigenschaft axisY.
Siehe auch axisY(), addAxis(), und releaseAxis().
void Q3DSurface::setAxisZ(QValue3DAxis *axis)
Legt axis als aktive z-Achse fest. Ruft implizit addAxis() auf, um das Eigentum an der Achse auf dieses Diagramm zu übertragen.
Wenn axis gleich Null ist, wird eine temporäre Standardachse ohne Beschriftung und mit einem sich automatisch anpassenden Bereich erstellt.
Diese temporäre Achse wird zerstört, wenn eine andere Achse explizit auf dieselbe Ausrichtung gesetzt wird.
Hinweis: Setter-Funktion für die Eigenschaft axisZ.
Siehe auch axisZ(), addAxis(), und releaseAxis().
© 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.