Q3DSurfaceWidgetItem Class

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

Header: #include <Q3DSurfaceWidgetItem>
CMake: find_package(Qt6 REQUIRED COMPONENTS Graphs)
target_link_libraries(mytarget PRIVATE Qt6::Graphs)
qmake: QT += graphs
Inherits: 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() も参照して ください。

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