Qt Graphs 3D の概要

Qt Graphs モジュールは、学術研究や医療などの分析が要求される業界向けに、応答が速く複雑で動的な 3D グラフを開発する方法を提供します。Qt Graphs は 3D 棒グラフ、散布図、面グラフを提供します。ユーザインタラクションとリアルタイムの 3D 描画グラフを組み合わせることで、空間を効果的に使用するユーザインタフェースを作成できます。3Dと2Dの表示を切り替えることで、データの視覚化において3Dの価値を真に活用することができます。

グラフのルック&フィールは、事前定義されたテーマを使用するか、新しいテーマを定義することによってカスタマイズすることができます。さらに、シーンはカメラの設定を指定することでカスタマイズでき、個々のアイテムは定義済みまたはユーザー定義のメッシュを使用することでカスタマイズできます。

Qt Graphs には、Qt アイテムモデルやハイトマップからのデータを視覚化するために使用できる、既製のデータプロキシが用意されています。各グラフタイプには基本的なプロキシ・タイプがあり、そのグラフに適したフォーマットでデータを受け取ります。詳しくは、Qt グラフの 3D によるデータ処理を参照してください。

エンドユーザーは、グラフを回転させたり、データを拡大・縮小したり、項目を選択したり、3Dデータの2Dスライスを表示したりして、グラフで表示されるデータを操作することができます。詳細は、Qt Graphs Interacting with Data in 3D を参照してください。

グラフの種類

Qt Graphs モジュールには、以下の 3D グラフ・タイプがあります:

Q3DGraphsWidgetItem クラスは、Q3DBarsWidgetItemQ3DScatterWidgetItemQ3DSurfaceWidgetItem のサブクラス用のウィジェット API を提供し、棒グラフ、散布図、面グラフの各グラフタイプを実装します。グラフ・タイプはデータの表示方法を決定する。

すべてのレンダリングはQQuickGraphsItem で行われ、QQuick3DViewport を継承し、QtQuick3D を使用してView3D を提供する。Bars3DScatter3DSurface3D のサブクラスがある。

3D棒グラフ

3D棒グラフは、データをカテゴリー別にグループ化された3D棒として表示する。グラフの作成にはQ3DGraphsWidgetItem クラスを使用します。QBar3DSeriesQBarDataProxy のクラスは、グラフにデータを設定したり、描画モードや網掛けなど、グラフの視覚的なプロパティを制御するために使われます。QML では、対応する型はBars3DBar3DSeriesBarDataProxy です。

詳しくは、How to construct a minimal Q3DBarsWidgetItem graph単純棒グラフの例を参照してください。

3D散布図

3D散布図はデータを点の集まりとして表示します。グラフの作成にはQ3DScatterWidgetItem クラスを使用します。QScatter3DSeriesQScatterDataProxy クラスは、グラフにデータを設定したり、グラフの視覚的なプロパティを制御するために使われます。QML では、対応する型はScatter3DScatter3DSeriesScatterDataProxy です。

詳しくは、How to construct a minimal Q3DScatterWidgetItem graph単純散布図の例を参照してください。

3D曲面グラフ

3D曲面グラフはデータを3D曲面プロットとして表示します。Q3DSurfaceWidgetItem クラスを使用してグラフを作成します。QSurface3DSeriesQSurfaceDataProxy クラスは、グラフにデータを設定したり、グラフの視覚的なプロパティを制御するために使われます。QMLでは、対応する型はSurface3DSurface3DSeriesSurfaceDataProxy です。

詳しくは、How to construct a minimal Q3DSurfaceWidgetItem graphGraph GallerySurface Graph Galleryの例を参照してください。

データのレンダリングにOpenGL ESを使う

Qt Graphs はQtQuick3D をベースにしています。つまり、Qt Graphs はレンダリングにターゲッ ト・プラットフォームのネイティブ・バックエンドを使用します。ただし、OpenGL ES3やVulkanなど、OpenGL ES2より上位のものをサポートしていないターゲットでOpenGL ES2を使用する場合、以下の機能はサポートされません:

レンダリングモードの選択

QML では、GraphsItem3D.RenderingMode プロパティを設定することで、グラフをウィンドウの背景に直接描画するのか、それとも通常の QML アイテム描画時に描画されるオフスクリーン表面に描画するのかを指定することができます。

背景描画モードは間接描画モードよりも若干パフォーマンスが向上しますが、その代償としてQMLの動作が非標準となります。例えば、グラフはアンチエイリアスをサポートしていません。したがって、レンダリングモードの変更は、パフォーマンスとクオリティの問題です。

Qt Quick はデータ・レンダリングに専用のシーングラフを使用するため、グラフに最適です。

3D軸

Qt グラフは以下の軸タイプをサポートしています:

  • 値軸
  • カテゴリー軸

軸は、線またはグリッドを表示するように設定できます。どちらの軸タイプも、QAbstract3DAxis クラスまたはAbstract3DAxis QML タイプの特殊化です。

値軸では、値の範囲と、範囲を分割するセグメントとサブセグメントのカウントを設定できます。デフォルトでは、各セグメント間にラベルが描画されます。デフォルトでは、各セグメントと各サブセグメントの間にグリッド線が引かれます。値軸は、QValue3DAxis クラスまたはValue3DAxis QML タイプを使用して実装されます。

カテゴリ軸には、名前付きの範囲と調整可能な範囲幅があります。軸範囲によって定義されたデータ・ウィンドウ・サイズに基づいて、等しいサイズのカテゴリに分割されます。ラベルは、提供されている場合、デフォルトでカテゴリの位置に描画されます。既定では、カテゴリ間にグリッド線が引かれます。カテゴリ軸は、QCategory3DAxis クラスまたはCategory3DAxis QML タイプを使用して実装されます。

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

すべてのグラフ・タイプで、複数の系列を同時に表示できる。すべての系列が同じ数の行と列を含む必要はない。行ラベルと列ラベルは、行軸と列軸に対して明示的に定義されていない限り、最初に追加された系列から取得される。

軸フォーマッタを使用して、値軸グリッド線とラベルをカスタマイズすることができます。QValue3DAxisFormatter クラスとValue3DAxisFormatter QML タイプは、線形値 3D 軸のフォーマット・ルールを提供します。QLogValue3DAxisFormatter クラスとLogValue3DAxisFormatter QMLタイプは、対数値3D軸のフォーマットルールを提供します。

極横軸は、polar プロパティを設定することで、表面グラフや散布図に使用することができます。棒グラフにも設定できますが、設定すると警告が表示され、無視されます。

3Dシーンのカスタマイズ

Qt Graphs はQtQuick3D の上に構築されているので、QtQuick3D のシーンを Qt Graphs のシーンに統合することができます。詳しくは、Qt Quick 3D と Qt Graphs の統合を参照してください。

アイテムのカスタマイズ

Qt Graphsには、バーや散布図アイテムのメッシュタイプがあらかじめ定義されています。メッシュタイプによって、棒や散布図アイテムがグラフ上でどのように見えるかが決まります。カスタムジオメトリをメッシュファイルとして指定することもできます。詳細はQAbstract3DSeries::userDefinedMesh() を参照。より多様性を持たせるために、メッシュの回転にクォータニオンを設定することができる。

個々のアイテムのカスタマイズだけでなく、QCustom3DItem クラスやCustom3DItem QML タイプを使用して、グラフにカスタムアイテムを追加することもできます。アイテムにはカスタムメッシュ、位置、スケーリング、回転、そしてオプションのテクスチャーがあります。

グラフに追加するボリュームレンダリングオブジェクトを作成するには、QCustom3DVolume クラスとCustom3DVolume QML タイプを使用します。ボリュームレンダリングオブジェクトは、3Dテクスチャを持つボックスです。ボリュームには、ボリュームの各主軸に沿った3つのスライス面がサポートされています。

QCustom3DLabel クラスとCustom3DLabel QMLタイプは、指定されたテキスト、フォント、位置、拡大縮小、回転を持つカスタムラベルを実装します。アクティブテーマは、ラベルの色、ボーダー、背景を決定します。

カスタム入力の処理

Qt Graphs は、選択、回転、ズームなどの典型的なアクションに対してデフォルトの入力ハンドラを実装しています。デフォルトの入力ハンドラの代わりにカスタム入力ハンドラを実装するには、必要な入力シグナルをオーバーライドします。

onTapped: {
    // Disable the default input handler
    unsetDefaultTapHandler()
    // Implement own custom event handler
    console.log("Custom tap event handler")
}

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