Q3DSurfaceWidgetItem Class

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

ヘッダー #include <Q3DSurfaceWidgetItem>
CMake: find_package(Qt6 REQUIRED COMPONENTS GraphsWidgets)
target_link_libraries(mytarget PRIVATE Qt6::GraphsWidgets)
qmake: QT += graphswidgets
継承: Q3DGraphsWidgetItem

プロパティ

パブリック機能

Q3DSurfaceWidgetItem(QObject *parent = nullptr)
virtual ~Q3DSurfaceWidgetItem() override
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

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

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

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

Q3DSurfaceWidgetItemに軸が明示的に設定されていない場合、ラベルのない一時的なデフォルト軸が作成されます。これらのデフォルト軸は、軸アクセサによって変更することができるが、軸がオリエンテーションに対して明示的に設定されるとすぐに、そのオリエンテーションのデフォルト軸は破棄される。

最小のQ3DSurfaceWidgetItemグラフの作り方

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

QQuickWidget quickWidget;
Q3DSurfaceWidgetItem surface;
surface.setWidget(&quickWidget);
surface.widget()->setMinimumSize(QSize(256, 256));

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

Note: 新しいプロキシとシリーズの関係では、データはシリーズで保持される。したがって、プロキシがデータを追加、削除、編集できるようにするためには、最初にシリーズを作成することが前提条件となる。

まずデータを行要素に送り、そのポインタをデータ要素に追加します:

dataRow1 << QSurfaceDataItem(0.0f, 0.1f, 0.5f) << QSurfaceDataItem(1.0f, 0.5f, 0.5f);
dataRow2 << QSurfaceDataItem(0.0f, 1.8f, 1.0f) << QSurfaceDataItem(1.0f, 1.2f, 1.0f);
data << dataRow1 << dataRow2;

新しい系列を作成し、それにデータを設定します:

QSurface3DSeries series;
series.dataProxy()->resetArray(data);
surface.addSeries(&series);

最後に、それを可視に設定する必要があります:

surface.widget()->show();

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

#include <QtGraphs>
#include <QtGraphsWidgets/q3dsurfacewidgetitem.h>
#include <QtWidgets/qapplication.h>

int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    QQuickWidget quickWidget;
    Q3DSurfaceWidgetItem surface;
    surface.setWidget(&quickWidget);
    surface.widget()->setMinimumSize(QSize(256, 256));
    QSurfaceDataArray data;
    QSurfaceDataRow dataRow1;
    QSurfaceDataRow dataRow2;

    dataRow1 << QSurfaceDataItem(0.0f, 0.1f, 0.5f) << QSurfaceDataItem(1.0f, 0.5f, 0.5f);
    dataRow2 << QSurfaceDataItem(0.0f, 1.8f, 1.0f) << QSurfaceDataItem(1.0f, 1.2f, 1.0f);
    data << dataRow1 << dataRow2;

    QSurface3DSeries series;
    series.dataProxy()->resetArray(data);
    surface.addSeries(&series);
    surface.widget()->show();

    return app.exec();
}

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

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

Q3DBarsWidgetItem,Q3DScatterWidgetItem,Qt Graphs C++ Classes for 3Dも参照してください

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

axisX : QValue3DAxis*

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

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

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

この一時的な軸は、他の軸が同じ向きに明示的に設定されると破棄される。

アクセス関数:

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

通知シグナル:

void axisXChanged(QValue3DAxis *axis)

addAxis() およびreleaseAxis()も参照

axisY : QValue3DAxis*

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

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

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

この一時的な軸は、他の軸が同じ向きに明示的に設定されると破棄される。

アクセス関数:

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

通知シグナル:

void axisYChanged(QValue3DAxis *axis)

addAxis() およびreleaseAxis()も参照

axisZ : QValue3DAxis*

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

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

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

この一時的な軸は、他の軸が同じ向きに明示的に設定されると破棄される。

アクセス関数:

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

通知シグナル:

void axisZChanged(QValue3DAxis *axis)

addAxis() およびreleaseAxis()も参照

flipHorizontalGrid : bool

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

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

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

アクセス関数:

bool flipHorizontalGrid() const
void setFlipHorizontalGrid(bool flip)

通知シグナル:

void flipHorizontalGridChanged(bool flip)

[read-only] selectedSeries : QSurface3DSeries* const

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

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

アクセス関数

QSurface3DSeries *selectedSeries() const

通知シグナル:

void selectedSeriesChanged(QSurface3DSeries *series)

メンバ関数ドキュメント

[explicit] Q3DSurfaceWidgetItem::Q3DSurfaceWidgetItem(QObject *parent = nullptr)

新しい 3D サーフェスグラフをオプションのparent で構築します。

[override virtual noexcept] Q3DSurfaceWidgetItem::~Q3DSurfaceWidgetItem()

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

void Q3DSurfaceWidgetItem::addAxis(QValue3DAxis *axis)

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

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

void Q3DSurfaceWidgetItem::addSeries(QSurface3DSeries *series)

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

Q3DGraphsWidgetItem::hasSeries()も参照

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

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

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

void Q3DSurfaceWidgetItem::releaseAxis(QValue3DAxis *axis)

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

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

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

void Q3DSurfaceWidgetItem::removeSeries(QSurface3DSeries *series)

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

Q3DGraphsWidgetItem::hasSeries()も参照

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

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

Q3DGraphsWidgetItem::hasSeries()も参照

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