QWheelEvent Class

QWheelEventクラスは、ホイールイベントを記述するパラメータを含んでいます。詳細...

Header: #include <QWheelEvent>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
Inherits: QSinglePointEvent

パブリック関数

QWheelEvent(const QPointF &pos, const QPointF &globalPos, QPoint pixelDelta, QPoint angleDelta, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Qt::ScrollPhase phase, bool inverted, Qt::MouseEventSource source = Qt::MouseEventNotSynthesized, const QPointingDevice *device = QPointingDevice::primaryPointingDevice())
QPoint angleDelta() const
bool inverted() const
Qt::ScrollPhase phase() const
QPoint pixelDelta() const

再実装パブリック関数

virtual bool isBeginEvent() const override
virtual bool isEndEvent() const override
virtual bool isUpdateEvent() const override

詳細説明

ホイールイベントは、マウスカーソルの下にあるウィジェットに送られますが、そのウィジェットがイベントを処理しない場合は、フォーカスウィジェットに送られます。ホイールイベントは、マウスホイールとトラックパッドのスクロールジェスチャの両方に対して生成されます。ホイール・イベントのデルタを読み取るには、2つの方法があります:angleDelta() は、ホイールの度数でデルタを返します。これらの値は常に提供されます。pixelDelta() はスクリーン・ピクセル単位でデルタを返し、macOSのような高解像度のトラックパッドを持つプラットフォームで利用できます。その場合、device()->type()はQInputDevice::DeviceType::Touchpadを返します。

関数position() とglobalPosition() は、イベント発生時のマウスカーソルの位置を返します。

ホイール・イベントには、受信者がそのイベントを望んでいるかどうかを示す特別な accept フラグが含まれています。ホイール・イベントを処理しない場合は、ignore() を呼び出す必要があります。これにより、親ウィジェットに確実に送信されます。

QWidget::setEnabled() 関数を使用すると、ウィジェットのマウス・イベントとキーボード・イベントを有効または無効にできます。

イベント・ハンドラQWidget::wheelEvent() は、ホイール・イベントを受け取ります。

QMouseEvent およびQWidget::grabMouse()も参照

メンバ関数ドキュメント

QWheelEvent::QWheelEvent(const QPointF &pos, const QPointF &globalPos, QPoint pixelDelta, QPoint angleDelta, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Qt::ScrollPhase phase, bool inverted, Qt::MouseEventSource source = Qt::MouseEventNotSynthesized, const QPointingDevice *device = QPointingDevice::primaryPointingDevice())

ホイール・イベント・オブジェクトを構築する。

pos は、ウィンドウ内のマウスカーソルの位置を提供する。グローバル座標での位置はglobalPos で指定されます。

pixelDelta angleDelta pixelDelta はオプションで、NULLにすることもできる。

イベント発生時のマウスとキーボードの状態は、buttonsmodifiers で指定される。

イベントのスクロールフェーズはphase で指定され、source は、これが本物のイベントか人工(合成)イベントかを示す。

システムが、(macOSのタッチパッドの自然なスクロールのように)イ ベントで配信されるデルタ値を反転するように設定されている場合、invertedtrue であるべきである。そうでない場合は、invertedfalse

ホイールイベントが発生したデバイスは、device で指定される。

position()、globalPosition()、angleDelta()、pixelDelta()、phase()、inverted()、device()も参照のこと

QPoint QWheelEvent::angleDelta() const

ホイールを回転させた相対量を、8 分の 1 度単位で返します。正の値は、ホイールがユーザーから遠ざかる方向に回転されたことを示し、負の値は、ホイールがユーザーに向かって後方に回転されたことを示す。angleDelta().y() は、一般的な垂直方向のマウスホイールが、前のイベント以降に回転された角度を提供する。angleDelta().x() は、マウスに水平方向のホイールがある場合、水平方向のマウスホイールが回転された角度を提供し、そうでない場合はゼロのままである。angleDelta().x()一部のマウスでは、ユーザーがホイールを傾けて水平スクロー ルを行うことができ、一部のタッチパッドは水平スクロールジェスチャをサ ポートしている。

この場合、デルタ値は120の倍数になります。つまり、120単位 * 1/8 = 15度です。

しかし、一部のマウスはより細かい解像度のホイールを持ち、120単位より小さい(15度より小さい)デルタ値を送信します。この可能性をサポートするには、120の値に達するまでイベントからのデルタ値を累積的に加算してからウィジェットをスクロールするか、各ホイールイベントに応答してウィジェットを部分的にスクロールします。しかし、よりネイティブな感触を提供するために、pixelDelta() が利用可能なプラットフォームでは、 () を使用することをお勧めします。

void MyWidget::wheelEvent(QWheelEvent *event)
{
    QPoint numPixels = event->pixelDelta();
    QPoint numDegrees = event->angleDelta() / 8;

    if (!numPixels.isNull()) {
        scrollWithPixels(numPixels);
    } else if (!numDegrees.isNull()) {
        QPoint numSteps = numDegrees / 15;
        scrollWithDegrees(numSteps);
    }

    event->accept();
}

注意: スクロールをサポートするプラットフォームでは、phases 、デルタがNULLになる場合があります:

  • スクロールが始まろうとしているが、距離がまだ変化していない (Qt::ScrollBegin)、
  • または、スクロールが終了し、距離が変化しなかった場合 (Qt::ScrollEnd)。

注: プロパティ angleDelta のゲッター関数。

pixelDelta()も参照

bool QWheelEvent::inverted() const

イベントとともに配信されるデルタ値が反転しているかどうかを返します。

通常、ホイールの上部が操作している手から離れて回転している場合、垂直ホイールは正のデルタ値を持つQWheelEvent を生成します。同様に、水平方向のホイールの動きは、ホイールの上部が左に移動している場合、正のデルタ値を持つQWheelEvent を生成する。

ただし、一部のプラットフォームでは、上記と同じ操作で負のデルタ値(ただし、大きさは同じ)を生成するように、これを設定できます。invertedプロパティを使用すると、ホイールイベントコンシューマは、システム設定に関係なく、常にホイールの方向に従うことを選択できます。(このようなユースケースの1つは、ビジュアルタンブラーが回転するのと同じ方向に、ユーザがホイールを回転させる場合です。もう1つの使用例は、システム設定に関係なく、タッチパッド上の指の移動方向にスライダーハンドルを追従させることです)。

注意: 多くのプラットフォームはそのような情報を提供しません。そのようなプラットフォームでは、invertedは常にfalseを返します。

メモ: inverted プロパティのゲッター関数。

[override virtual] bool QWheelEvent::isBeginEvent() const

再インプリメント:QSinglePointEvent::isBeginEvent() const.

このイベントのphase() がQt::ScrollBegin の場合、true を返す。

[override virtual] bool QWheelEvent::isEndEvent() const

再インプリメント:QSinglePointEvent::isEndEvent() const.

このイベントのphase() がQt::ScrollEnd の場合、true を返します。

[override virtual] bool QWheelEvent::isUpdateEvent() const

再インプリメント:QSinglePointEvent::isUpdateEvent() const.

このイベントのphase() がQt::ScrollUpdate またはQt::ScrollMomentum の場合、true を返します。

Qt::ScrollPhase QWheelEvent::phase() const

このホイールイベントのスクロールフェーズを返します。

注意 :Qt::ScrollBegin およびQt::ScrollEnd フェーズは、現在 macOS でのみサポートされています。

: プロパティフェーズのゲッター関数です。

QPoint QWheelEvent::pixelDelta() const

スクロール距離: スクリーンのスクロール距離をピクセル単位で返します。こ の値は、 macOS の よ う な高解像度 ピ ク セルベース の差分値をサポー ト す る プ ラ ッ ト フ ォームで提供 さ れます。こ の値は、 画面上の コ ン テ ン ツ を ス ク ロ ールす る ために直接用い る 必要があ り ます。

void MyWidget::wheelEvent(QWheelEvent *event)
{
    QPoint numPixels = event->pixelDelta();
    QPoint numDegrees = event->angleDelta() / 8;

    if (!numPixels.isNull()) {
        scrollWithPixels(numPixels);
    } else if (!numDegrees.isNull()) {
        QPoint numSteps = numDegrees / 15;
        scrollWithDegrees(numSteps);
    }

    event->accept();
}

注意: phases スクロールをサポートするプラットフォームでは、次のような場合にデルタがNULLになることがある:

  • スクロールが始まろうとしているが、距離がまだ変化していない (Qt::ScrollBegin)、
  • または、スクロールが終了し、距離が変化しなくなった場合(Qt::ScrollEnd)。

注: X11では、この値はドライバ固有のものであり、信頼できませんので、代わりにangleDelta() を使用してください。

注: プロパティ pixelDelta のゲッター関数です。

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