Qt 拡張機能と QCustomPlot ユーザーの対話

I. 概要

QCustomPlot は、いくつかの組み込みのユーザー インタラクションを提供します。それらは大きく分けて次のようになります。

  • マウスのドラッグとマウスホイールの回転による範囲操作
  • 図面エンティティをクリックして選択します
  • ユーザーが描画エンティティをクリックしたときに出力される信号

2. 運用範囲

これは実際には、グラフを上下左右にパンしたりズームしたりするマウスの機能を有効にするためです

ユーザーが軸範囲を操作するデフォルトの方法は、対応する QCPAxisRect でドラッグ操作を実行することです。
ここに画像の説明を挿入します

QCustomPlot コントロールで範囲ドラッグを有効にするには、現在許可されているインタラクションにフラグ QCP::iRangeDrag を追加する必要があります。これは、customPlot->setInteraction(QCP::iRangeDrag, true) で実行できます。一方向のみのドラッグを許可するには、QCPAxisRect::setRangeDrag を使用し、Qt::Vertical または Qt::horizo​​ntal を指定します。デフォルトのリストでは、Qt::Vertical | Qt::horizo​​ntal の両方向が許可されます。

ドラッグ操作中、QCPAxisRect::setRangeDragAxes によって設定された軸はその範囲をリアルタイムで更新し、自動的に再描画が行われます。これにより、ユーザーは描画座標面をマウスで掴んで移動するような印象を与えることができます。最初に、範囲ドラッグ軸を長方形の下軸と左軸として設定します。QCustomPlot コントロールのデフォルトの軸長方形の場合、それらは QCustomPlot::xAxis および QCustomPlot::yAxis です。

範囲のサイズを変更するには、つまり描画を拡大または縮小するには、ユーザーはマウス ホイールを使用できます。この動作は、インタラクション フラグ QCP::iRangeZoom によって制御されます。これも QCustomPlot::setInteraction 経由でアクティブ化する必要があります。範囲ドラッグと同様に、影響を受ける軸と方向に基づいてスケーリングを選択することもできます。関数 QCPAxisRect::setRangeZoomAxes および QCPAxisRect::setRangeZoom を参照してください。

さらに、ズーム強度は QCPAxisRect::setRangeZoomFactor を介して制御できます。通常のマウス ハードウェアでは、マウス ホイールの 1 ステップが軸範囲に適用されるこの係数に対応します。この係数が 1 より大きい場合、マウス ホイールを前に回すと範囲が狭まり (ズームイン)、マウス ホイールを後ろに回すと範囲が広がります (ズームアウト)。この動作を元に戻すには、マウス ホイールのスケール係数を 1 未満 (ただしゼロより大きい) に設定します。ズームは常に、図面内の現在のマウス カーソル位置を中心に行われます。

これは、関心のあるフィーチャにカーソルを合わせてマウス ホイールを回転させると、そのフィーチャがズームインされることを意味します。

3. 選択メカニズム

ここに画像の説明を挿入します

QCustomPlot はユーザーが軸や図などのプロット内の各コンポーネントを選択できる選択メカニズムを提供します。QCP::iSelect(…) で始まるインタラクション フラグを使用して、特定のタイプのエンティティを図内で通常選択できるかどうかを制御できます。たとえば、customPlot->setInteraction(QCP::iSelectPlottables, true) を設定すると、ユーザーはプロット (グラフなど) をクリックして選択できるようになります。すべてのインタラクション フラグについては、QCP::Interaction のドキュメントを参照してください。

複数のオブジェクトを同時に選択できるようにするには、QCP::iMultiSelect インタラクション フラグを設定します。ユーザーは、複数選択修飾子 (QCustomPlot::setMultiSelectModifier を参照) (デフォルトでは Ctrl) を押し続けることで、複数のオブジェクトを連続して選択できます。

1. グラフの選択可能性と選択状態を制御する

選択可能性は、個々のオブジェクトに対して setSelectable 関数を使用してさらに微調整できます。たとえば、図面内の特定のグラフをユーザーが選択できない場合は、thatGraph->setSelectable(false) を呼び出します。選択された状態は、setSelected 関数を使用してプログラム的に変更できます。ユーザーによる選択が無効になっている場合でも、選択状態はプログラムによって変更できます。

プロット内のすべてのオブジェクトの選択を解除するには、QCustomPlot::deselectAll を呼び出します。

2. 選択したオブジェクトの外観

選択したオブジェクトは、多くの場合、異なるペン、ブラシ、フォントで表示されます。実際、選択したオブジェクトがより目立つように表示されますこれは、いくつか例を挙げると、QCPGraph::setSelectedPen、QCPGraph::setSelectedBrush、QCPAxis::setSelectedLabelFont、QCPAxis::setSelectedBasePen、QCPItemText::setSelectedColor メソッドを介して構成できます。ご覧のとおり、これらの名前は元の (選択されていない) プロパティと似ていますが、「選択済み」という接頭辞が付いています。

3. マルチパートオブジェクト

軸や凡例などの一部のオブジェクトは外観が複雑であるため、単一のブール値を選択するだけでは十分ではありません。これらの場合、選択可能性と選択状態は両方とも、SelectablePart フラグの 1 つまたは組み合わせです (それぞれの QFlags タイプは SelectablePart と呼ばれます)。各マルチパート オブジェクトは、独自の SelectablePart タイプを定義します。
ここに画像の説明を挿入します

たとえば、QCPAxis は概念的に、目盛り付きの軸バックボーン目盛りラベル (数字)、および軸ラベルの 3 つの部分で構成されます。これら 3 つの部分は個別に選択可能である必要があるため、 qcpaaxis::SelectablePart は qcpaaxis::spNone、qcpaaxis::spAxis、qcpaaxis::spTickLabels、および qcpaaxis::spAxisLabel を定義します。軸ステムと目盛りラベルを選択可能にするが、軸ラベルは選択できないようにするには、theAxis->setSelectableParts(qcpaaxis::spAxis|QCP::spTickLabels) を呼び出します。

マルチパート オブジェクトの現在の選択状態を制御するには、 qcpaaxis::setSelectedParts メソッドを使用します。

4. 選択肢の変化に対応する

選択が変更されると、各オブジェクトはselectionChangedと呼ばれるシグナルを発行します。変更がユーザーによって行われたのか、setSelected/setSelectedParts を呼び出してプログラム的に行われたのかは関係ありません。

プロット内の選択がユーザーの操作によって変更された場合、QCustomPlot 範囲信号 QCustomPlot::selectionChangedByUser が出力されます。

この信号に接続されたスロット関数では、特定のオブジェクトの選択ステータスを確認し、それに応じて反応できます。ここで、QCustomPlot::selectedPlottables、selectedItems、selectedax、および selectedLegends メソッドは、特定のタイプの選択されたオブジェクトを取得するのに役立つ場合があります。

4. ユーザーインタラクションシグナル

QCustomPlot は選択メカニズムから独立しており、ユーザーの操作に応じてさまざまなシグナルを発します。最下位レベルのものは、QCustomPlot::mouseDoubleClick、mousePress、mouseMove、mouserrelease、mouseWheel 信号です。これらは、QCustomPlot コントロールの対応するイベントが発生したときに発行されます。最もクリーンなアプローチは、QCustomPlot のサブクラスを作成し、同じ名前のイベント メソッド (QWidget から継承) を再実装することであることに注意してください。ただし、QCustomPlot をサブクラス化したくない場合は、これらのシグナルを使用すると、単純なタスクのユーザー操作に簡単にアクセスできます。

プロット内の特定のオブジェクトのクリックとダブルクリックをレポートするためのより高度な信号もあります。QCustomPlot::plottableClick、plottableDoubleClick、itemClick、itemDoubleClick、axisClick、axisDoubleClick、legendClick、legendDoubleClick、titleClick、titleDoubleClick です。これらの信号はすべて、どのオブジェクトがクリックされたか (マルチパート オブジェクトの場合はどの部分がクリックされたか)、および関連する QMouseEvent を報告します。

おすすめ

転載: blog.csdn.net/qq_43680827/article/details/133445779