このページでは

QWheelEvent Class

QWheelEvent クラスには、ホイールイベントを表すパラメータが含まれています。詳細...

ヘッダー: #include <QWheelEvent>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
継承元: 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

プロテクトされた関数

QWheelEvent(QWheelEvent &&)
QWheelEvent &operator=(QWheelEvent &&)
QWheelEvent &operator=(const QWheelEvent &other)

詳細な説明

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

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

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

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

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

QMouseEvent およびQWidget::grabMouse()も参照してください 。

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

[read-only] angleDelta : QPoint

このプロパティには、ホイールが回転した相対的な角度が、8分の1度単位で格納されます

正の値は、ホイールがユーザーから離れる方向に(前方へ)回転したことを示し、負の値は、ホイールがユーザーに向かって(後方へ)回転したことを示します。angleDelta().y() は、前回のイベント以降に一般的な垂直マウスホイールが回転した角度を返します。angleDelta().x() は、マウスに水平ホイールが搭載されている場合、その水平ホイールが回転した角度を返します。 そうでない場合はゼロのままとなります。

ほとんどのマウスでは 15 度単位で動作するため、その場合は delta 値は 120 の倍数になります。つまり、120 単位 × 1/8 = 15 度です。

注: phases によるスクロールをサポートしているプラットフォームでは 、スクロールが開始しようとしているとき(Qt::ScrollBegin )や終了したとき(Qt::ScrollEnd )に、deltaがnullになる場合があります。

アクセス関数:

QPoint angleDelta() const

pixelDelta()も参照してください 。

[read-only] device : const QPointingDevice*

このプロパティには、ホイールイベントが発生したデバイスが格納されます

pointingDevice()も参照してください 。

[read-only] inverted : bool

この特性は、イベントとともに送信されるデルタ値が反転しているかどうかにかかわらず成り立ちます

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

ただし、一部のプラットフォームではこれを設定可能であり、上記と同じ操作でも負のデルタ値(ただし絶対値は同じ)が生成される場合があります。「inverted」プロパティを使用することで、ホイールイベントの処理側は、システム設定にかかわらず、特定のウィジェットに対してのみ、常にホイールの方向に従うように選択できます。

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

アクセス関数:

bool inverted() const

[read-only] phase : Qt::ScrollPhase

このプロパティは、このホイールイベントのスクロールフェーズを保持します

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

アクセス関数:

Qt::ScrollPhase phase() const

[read-only] pixelDelta : QPoint

このプロパティは、画面上のスクロール距離(ピクセル単位)を保持します

この値は、macOSなど、高解像度のピクセル単位のデルタ値をサポートするプラットフォームで提供されます。この値は、画面上のコンテンツをスクロールさせるために直接使用する必要があります。

注: phases によるスクロールをサポートするプラットフォームでは 、スクロールが開始しようとしているとき(Qt::ScrollBegin )や終了したとき(Qt::ScrollEnd )に、このデルタ値が null になる場合があります。

注: X11では 、この値はドライバに依存し、信頼性が低いため、代わりに `angleDelta()` を使用してください。

アクセス関数:

QPoint pixelDelta() const

angleDelta()も参照してください 。

メンバ関数のドキュメント

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でも構いません。

イベント発生時のマウスおよびキーボードの状態は、buttons およびmodifiers によって指定されます。

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

システムが、イベントとともに送信されるデルタ値を反転するように設定されている場合(macOS でのタッチパッドの自然なスクロールなど)、inverted はtrue である必要があります。それ以外の場合は、inverted となります。false

ホイールイベントの発信元となるデバイスは、device によって指定されます。

関連項目: position()、globalPosition()、angleDelta()、pixelDelta()、phase()、inverted()、およびdevice()。

[protected delete] QWheelEvent::QWheelEvent(QWheelEvent &&)

QWheelEvent のインスタンスをMoveコンストラクタで生成します。この関数は削除されています。

QPoint QWheelEvent::angleDelta() const

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

ほとんどのマウスでは15度刻みで動作するため、その場合はデルタ値は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」プロパティを使用することで、ホイールイベントの処理側は、システム設定に関係なく常にホイールの方向に従うように選択できますが、これは特定のウィジェットに限定されます。 (その一例として、ユーザーが視覚的なタンブラーが回転するのと同じ方向にホイールを回転させる場合が挙げられます。また、システムの設定に関係なく、タッチパッド上の指の動きの方向にスライダーのハンドルを追従させるというユースケースもあります。)

注:多くの プラットフォームでは、このような情報は提供されていません。そのようなプラットフォームでは、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でのみサポートされています。

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

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`のゲッター 関数です。

[protected delete] QWheelEvent &QWheelEvent::operator=(QWheelEvent &&)

other をこのQWheelEvent インスタンスにムーブ代入します。この関数は削除されます。

[noexcept protected default] QWheelEvent &QWheelEvent::operator=(const QWheelEvent &other)

other をこのQWheelEvent インスタンスにコピーして割り当てます。

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