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:

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.