Q3DSurface Class

Q3DSurfaceクラスは、3Dサーフェスプロットをレンダリングするためのメソッドを提供します。詳細...

ヘッダー #include <Q3DSurface>
CMake: find_package(Qt6 REQUIRED COMPONENTS DataVisualization)
target_link_libraries(mytarget PRIVATE Qt6::DataVisualization)
qmake: QT += datavisualization
以来:QtDataVisualization 1.0
継承: QAbstract3DGraph

プロパティ

パブリック機能

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)

シグナル

void axisXChanged(QValue3DAxis *axis)
void axisYChanged(QValue3DAxis *axis)
void axisZChanged(QValue3DAxis *axis)
void flipHorizontalGridChanged(bool flip)
void selectedSeriesChanged(QSurface3DSeries *series)

詳細説明

このクラスは、開発者が3Dサーフェスプロットをレンダリングし、シーンを自由に回転させて表示できるようにします。描画モードやシェーディングのようなサーフェスのビジュアルプロパティはQSurface3DSeries

Q3DSurfaceは、ユーザーがマウスの左ボタンでクリックした(デフォルトの入力ハンドラが使用されているとき)、またはQSurface3DSeries 。選択ポインターは、デフォルトの場合、データ点の値と点の座標を示すラベルを伴っている。

軸に表示される値の範囲とラベルの形式は、QValue3DAxis で制御できる。

グラフを回転させるには、マウスの右ボタンを押したままマウスを動かす。ズームはマウス・ホイールを使って行う。どちらもデフォルトの入力ハンドラが使用されていると仮定する。

Q3DSurfaceに軸が明示的に設定されていない場合、ラベルのない一時的なデフォルト軸が作成されます。これらのデフォルト軸は軸アクセサによって変更することができるが、方向に対して軸が明示的に設定されると、その方向のデフォルト軸は破壊される。

最小のQ3DSurfaceグラフの作り方

まず、Q3DSurfaceを構築する。この例ではグラフをトップレベルウィンドウとして表示しているので、デフォルトで設定されているQt::FramelessWindowHint フラグをクリアする必要がある:

Q3DSurface surface;
surface.setFlags(surface.flags() ^ Qt::FramelessWindowHint);

これでQ3DSurfaceはレンダリングするデータを受け取る準備ができた。値を受け取るデータエレメントを作成する:

最初にデータを行要素に送り、そのポインタをデータ要素に追加する:

*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();

このグラフの作成と表示に必要なコード一式は次のとおりである:

#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();
}

この数行のコードから、このようなグラフが作成される:

シーンを回転させたり、ズームインさせたり、サーフェスポイントを選択してその位置を表示させたりすることはできるが、この最小限のコード例には、それ以外のインタラクションは含まれていない。サーフェスグラフのように、提供されているサンプルに慣れることで、より多くを学ぶことができます。

Q3DBarsQ3DScatter 、および Qt Data Visualization C++ Classes.

プロパティのドキュメント

axisX : QValue3DAxis*

このプロパティは、アクティブな X 軸を保持します。

アクセス関数

QValue3DAxis *axisX() const
void setAxisX(QValue3DAxis *axis)

通知シグナル

void axisXChanged(QValue3DAxis *axis)

axisY : QValue3DAxis*

このプロパティは、アクティブなY軸を保持します。

アクセス関数

QValue3DAxis *axisY() const
void setAxisY(QValue3DAxis *axis)

通知シグナル

void axisYChanged(QValue3DAxis *axis)

axisZ : QValue3DAxis*

このプロパティは、アクティブな Z 軸を保持する。

アクセス関数

QValue3DAxis *axisZ() const
void setAxisZ(QValue3DAxis *axis)

ノーティファイアシグナル:

void axisZChanged(QValue3DAxis *axis)

[since QtDataVisualization 1.2] flipHorizontalGrid : bool

このプロパティは、水平軸グリッドをグラフの下部ではなく上部に表示するかどうかを保持する。

いくつかの使用例では、水平軸グリッドはほとんど表面で覆われているため、水平軸グリッドをグラフの下部ではなく上部に表示した方が便利な場合がある。典型的な使用例としては、トップダウン視点のオルソグラフィック投影を使用して2Dスペクトログラムを表示する場合である。

false の場合、横軸グリッドとラベルはグラフの水平背景に描画される。true の場合、横軸グリッドとラベルは、グラフの水平背景とは反対側に描画される。デフォルトはfalse

このプロパティは QtDataVisualization 1.2 で導入されました。

アクセス関数:

bool flipHorizontalGrid() const
void setFlipHorizontalGrid(bool flip)

通知シグナル:

void flipHorizontalGridChanged(bool flip)

[read-only] selectedSeries : QSurface3DSeries* const

このプロパティは、選択された系列または null を保持する。

selectionMode にSelectionMultiSeries が設定されている場合、このプロパティは選択されたポイントを所有する系列を保持する。

アクセス関数

QSurface3DSeries *selectedSeries() const

通知シグナル:

void selectedSeriesChanged(QSurface3DSeries *series)

メンバ関数ドキュメント

[explicit] Q3DSurface::Q3DSurface(const QSurfaceFormat *format = nullptr, QWindow *parent = nullptr)

オプションでparent ウィンドウとサーフェスformat を持つ新しい 3D サーフェス グラフを構築します。

[virtual noexcept] Q3DSurface::~Q3DSurface()

3Dサーフェスグラフを破棄します。

void Q3DSurface::addAxis(QValue3DAxis *axis)

グラフにaxis を追加する。addAxis によって追加された軸は、まだ使用されていません。addAxis は単に、axis の所有権をグラフに与えるために使用されます。axis が null であったり、他のグラフに追加されていたりしてはいけません。

releaseAxis(),setAxisX(),setAxisY(),setAxisZ()も参照のこと

void Q3DSurface::addSeries(QSurface3DSeries *series)

グラフにseries を追加する。グラフは複数の系列を含むことができるが、軸は1セットのみである。新しく追加された系列に選択項目が指定されている場合、その項目はハイライトされ、既存の選択項目はクリアされます。アクティブな選択項目を持つことができるのは、追加された1つの系列だけである。

QAbstract3DGraph::hasSeries()も参照

QList<QValue3DAxis *> Q3DSurface::axes() const

追加されたすべての軸のリストを返します。

addAxis()も参照してください

void Q3DSurface::releaseAxis(QValue3DAxis *axis)

このグラフに追加されている場合、axis の所有権を呼び出し元に戻す。解放されたaxis が使用中の場合、新しいデフォルト軸が作成され、アクティブに設定される。

既定の軸が解放され、後で追加された場合、他の軸と同じように動作します。

addAxis()、setAxisX()、setAxisY()、およびsetAxisZ()も参照して ください。

void Q3DSurface::removeSeries(QSurface3DSeries *series)

グラフからseries を削除する。

QAbstract3DGraph::hasSeries()も参照

QList<QSurface3DSeries *> Q3DSurface::seriesList() const

このグラフに追加された系列のリストを返す。

QAbstract3DGraph::hasSeries()も参照

void Q3DSurface::setAxisX(QValue3DAxis *axis)

axis をアクティブな x 軸として設定する。暗黙的にaddAxis() を呼び出して、軸の所有権をこのグラフに移す。

axis が NULL の場合、ラベルと自動調整範囲を持たない一時的なデフォルト軸が作成される。

この一時軸は、別の軸が同じ方向に明示的に設定されると破棄されます。

メモ: プロパティaxisX に対するセッター関数。

axisX()、addAxis()、およびreleaseAxis()も参照して ください。

void Q3DSurface::setAxisY(QValue3DAxis *axis)

axis をアクティブな Y 軸として設定する。暗黙的にaddAxis() を呼び出して、軸の所有権をこのグラフに移す。

axis が NULL の場合、ラベルと自動調整範囲を持たない一時的なデフォルト軸が作成される。

この一時軸は、別の軸が同じ方向に明示的に設定されると破棄されます。

メモ: プロパティaxisY に対するセッター関数。

axisY()、addAxis()、およびreleaseAxis()も参照して ください。

void Q3DSurface::setAxisZ(QValue3DAxis *axis)

axis をアクティブな Z 軸として設定する。暗黙的にaddAxis() を呼び出して、軸の所有権をこのグラフに移す。

axis が NULL の場合、ラベルと自動調整範囲を持たない一時的なデフォルト軸が作成される。

この一時軸は、別の軸が同じ方向に明示的に設定されると破棄されます。

メモ: プロパティaxisZ に対するセッター関数。

axisZ()、addAxis()、および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.