Q3DSurface Class

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

Header: #include <Q3DSurface>
CMake: find_package(Qt6 REQUIRED COMPONENTS DataVisualization)
target_link_libraries(mytarget PRIVATE Qt6::DataVisualization)
qmake: QT += datavisualization
Since: QtDataVisualization 1.0
Inherits: 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();
}

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

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

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)

通知シグナル:

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)

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

[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()も参照してください

©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。