このページでは

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

そして、この数行のコードによって次のような結果が得られます:

グリッド状の床の上に、緑色の折りたたまれた尾根面が示された、最小限の3D表面図

シーンの回転やズームインが可能で、サーフェスの点を選択してその位置を確認することもできますが、この最小限のコード例にはそれ以外のインタラクションは含まれていません。Surface Graphなどの提供されている例を参照することで、さらに詳しく学ぶことができます。

関連情報: Q3DBars 、Q3DScatter 、および 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)

Notifierシグナル:

void flipHorizontalGridChanged(bool flip)

[read-only] selectedSeries : QSurface3DSeries*

このプロパティには、選択されたシリーズ、または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()。

© 2026 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.