このページでは

QScroller Class

QScroller クラスを使用すると、あらゆるスクロールウィジェットやグラフィックアイテムでキネティックスクロールを有効にできます。詳細...

ヘッダー: #include <QScroller>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
継承元: QObject

パブリック型

enum Input { InputPress, InputMove, InputRelease }
enum ScrollerGestureType { TouchGesture, LeftMouseButtonGesture, MiddleMouseButtonGesture, RightMouseButtonGesture }
enum State { Inactive, Pressed, Dragging, Scrolling }

プロパティ

パブリック関数

QPointF finalPosition() const
bool handleInput(QScroller::Input input, const QPointF &position, qint64 timestamp = 0)
QPointF pixelPerMeter() const
QScrollerProperties scrollerProperties() const
void setSnapPositionsX(const QList<qreal> &positions)
void setSnapPositionsX(qreal first, qreal interval)
void setSnapPositionsY(const QList<qreal> &positions)
void setSnapPositionsY(qreal first, qreal interval)
QScroller::State state() const
void stop()
QObject *target() const
QPointF velocity() const

パブリックスロット

void ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin)
void ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin, int scrollTime)
void resendPrepareEvent()
void scrollTo(const QPointF &pos)
void scrollTo(const QPointF &pos, int scrollTime)
void setScrollerProperties(const QScrollerProperties &prop)

シグナル

void scrollerPropertiesChanged(const QScrollerProperties &newProperties)
void stateChanged(QScroller::State newState)

静的パブリックメンバー

QList<QScroller *> activeScrollers()
Qt::GestureType grabGesture(QObject *target, QScroller::ScrollerGestureType scrollGestureType = TouchGesture)
Qt::GestureType grabbedGesture(QObject *target)
bool hasScroller(QObject *target)
QScroller *scroller(QObject *target)
const QScroller *scroller(const QObject *target)
void ungrabGesture(QObject *target)

詳細な説明

キネティックスクロールでは、ユーザーがウィジェットを特定の方向に押すと、ユーザーまたは摩擦によって停止するまで、その方向へスクロールし続けます。慣性、摩擦、その他の物理的概念の特性を変更することで、直感的なユーザー体験を微調整することができます。

QScroller オブジェクトは、現在の位置とスクロール速度を保持し、更新処理を行うオブジェクトです。QScroller は、フリックジェスチャーによってトリガーされるほか

    QWidget *w = ...;
    QScroller::grabGesture(w, QScroller::LeftMouseButtonGesture);

、あるいは次のように直接起動できます:

    QWidget *w = ...;
    QScroller *scroller = QScroller::scroller(w);
    scroller->scrollTo(QPointF(100, 100));

スクロール対象のQObjectは、スクローラーがジオメトリ情報を更新する必要があるたびに`QScrollPrepareEvent `を受け取り、オブジェクトのコンテンツが実際にスクロールされる必要があるたびに`QScrollEvent `を受け取ります。

スクローラーは、グローバルなQAbstractAnimation タイマーを使用してQScrollEventを生成します。これは、QScrollerProperties::FrameRate を使用してQScrollerごとに変更可能です。

このキネティックスクローラーには、QScrollerProperties を通じて利用可能な設定が多数ありますが、それらすべてを、プラットフォームに最適化されたデフォルト値のままにしておくことをお勧めします。変更を行う前に、scroller の examples ディレクトリにあるplot のサンプルで試してみてください。

QScrollEvent 、QScrollPrepareEvent 、およびQScrollerPropertiesも参照してください 。

メンバ型のドキュメント

enum QScroller::Input

この列挙型は、QScroller に関連する入力イベントを、入力デバイスに依存しない観点から定義したものです。

定数値説明
QScroller::InputPress1ユーザーが入力デバイス(例:QEvent::MouseButtonPress 、QEvent::GraphicsSceneMousePress 、QEvent::TouchBegin )を押しました。
QScroller::InputMove2ユーザーが入力デバイスを動かしました(例:QEvent::MouseMove 、QEvent::GraphicsSceneMouseMove 、QEvent::TouchUpdate )。
QScroller::InputRelease3ユーザーが入力デバイスを離しました(例:QEvent::MouseButtonRelease 、QEvent::GraphicsSceneMouseRelease 、QEvent::TouchEnd )

enum QScroller::ScrollerGestureType

この列挙型には、QScroller のジェスチャー認識機能がサポートするさまざまなジェスチャータイプが含まれています。

定数値説明
QScroller::TouchGesture0ジェスチャー認識機能は、タッチイベントでのみトリガーされます。具体的には、タッチスクリーンを使用している場合は単一のタッチポイントに、タッチパッドを使用している場合は 2 つのタッチポイントに反応します。
QScroller::LeftMouseButtonGesture1ジェスチャ認識機能は、マウスの左ボタンイベントでのみトリガーされます。
QScroller::MiddleMouseButtonGesture3ジェスチャ認識機能は、マウスの中ボタンイベントでのみトリガーされます。
QScroller::RightMouseButtonGesture2ジェスチャー認識機能は、マウスの右ボタンイベントでのみトリガーされます。

enum QScroller::State

この列挙型には、QScroller のさまざまな状態が含まれています。

定数値説明
QScroller::Inactive0スクロールバーはスクロールしておらず、何も押されていません。
QScroller::Pressed1タッチイベントが受信されたか、マウスボタンが押されたが、現在スクロール領域はドラッグされていない。
QScroller::Dragging2スクロール領域が現在、タッチポイントまたはマウスの動きを追跡しています。
QScroller::Scrolling3スクロール領域が自発的に移動しています。

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

scrollerProperties : QScrollerProperties

このプロパティには、このスクローラのスクロール関連のプロパティが格納されます。これらのプロパティは、QScroller がスクロール動作を決定するために使用されます。

アクセス関数:

QScrollerProperties scrollerProperties() const
void setScrollerProperties(const QScrollerProperties &prop)

通知シグナル:

void scrollerPropertiesChanged(const QScrollerProperties &newProperties)

[read-only] state : State

このプロパティは、スクロールバーの状態を保持します

アクセス関数:

QScroller::State state() const

通知シグナル:

void stateChanged(QScroller::State newState)

関連項目: QScroller::State 。

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

[static] QList<QScroller *> QScroller::activeScrollers()

現在アクティブなQScroller オブジェクトのアプリケーション全体のリストを返します。アクティブなQScroller オブジェクトは、state()の範囲内にあるものの、QScroller::Inactive ではないものです。この関数は、独自のジェスチャー認識器を作成する際に役立ちます。

[slot] void QScroller::ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin)

ビューポート内に矩形rect が表示されるようにスクロールが開始され、その矩形の周囲には、xmargin およびymargin でピクセル単位で指定された追加のマージンが適用されます。

矩形と余白の合計がビューポート内に収まらない場合、rect からできるだけ多くの部分が見えるようにコンテンツがスクロールされます。

スクロール速度は、プラットフォームで定義された時間経過後に指定された位置に到達するように計算されます。

この関数は、scrollTo() を呼び出すことで、実際のスクロールを実行します。

注:この スロットは オーバーロードされています。このスロットに接続するには:

// Connect using qOverload:
connect(sender, &SenderClass::signal,
        scroller, qOverload(&QScroller::ensureVisible));

// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
        scroller, [receiver = scroller](const QRectF &rect, qreal xmargin, qreal ymargin) { receiver->ensureVisible(rect, xmargin, ymargin); });
その他の例や手法については、「オーバーロードされたスロットへの接続」を参照してください。

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

[slot] void QScroller::ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin, int scrollTime)

このバージョンは、scrollTime ミリ秒で目的の位置に到達します。

注:この スロットは オーバーロードされています。このスロットに接続するには:

// Connect using qOverload:
connect(sender, &SenderClass::signal,
        scroller, qOverload(&QScroller::ensureVisible));

// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
        scroller, [receiver = scroller](const QRectF &rect, qreal xmargin, qreal ymargin, int scrollTime) { receiver->ensureVisible(rect, xmargin, ymargin, scrollTime); });
その他の例や手法については、「オーバーロードされたスロットへの接続」を参照してください。

QPointF QScroller::finalPosition() const

現在のスクロール動作に対する推定最終位置を返します。スクロール状態が「Scrolling」でない場合は、現在の位置を返します。スクロール状態が「Inactive」の場合、結果は未定義となります。

目標位置はピクセル単位です。

pixelPerMeter() およびscrollTo()も参照してください 。

[static] Qt::GestureType QScroller::grabGesture(QObject *target, QScroller::ScrollerGestureType scrollGestureType = TouchGesture)

カスタムスクロールジェスチャ認識子を登録し、target 用にそれを取得して、結果として得られるジェスチャタイプを返します。scrollGestureType がTouchGesture に設定されている場合、ジェスチャはタッチイベントでトリガーされます。LeftMouseButtonGesture 、RightMouseButtonGesture 、またはMiddleMouseButtonGesture のいずれかに設定されている場合、対応するボタンのマウスイベントでトリガーされます。

1つのオブジェクトに対して、同時に有効にできるスクロールジェスチャーは1つだけです。同じオブジェクトに対してこの関数を2回呼び出すと、新しいジェスチャーを登録する前に、既存のジェスチャーが解除されます。

注: 予期しない副作用を防ぐため 、ジェスチャーがトリガーされている間はマウスイベントが処理されます。最初のマウス押下イベントは処理されないため、ジェスチャーはグローバル位置(INT_MIN, INT_MIN) で偽のマウス離しイベントを送信します。これにより、元のマウス押下イベントを受け取ったウィジェットの内部状態の一貫性が保たれます。

ungrabGesture() およびgrabbedGesture()も参照してください 。

[static] Qt::GestureType QScroller::grabbedGesture(QObject *target)

target に対して現在取得されているジェスチャーの種類を返します。ジェスチャーが取得されていない場合は0を返します。

grabGesture() およびungrabGesture()も参照してください 。

bool QScroller::handleInput(QScroller::Input input, const QPointF &position, qint64 timestamp = 0)

この関数は、ジェスチャー認識機能が新しい入力イベントをスクローラーに通知するために使用されます。スクローラーは、入力イベントおよび関連付けられたスクローラーのプロパティに基づいて、内部のstate()を変更します。スクローラーは、イベントの発生元となった入力デバイスの種類を区別しません。 したがって、イベントはinput 型、position 、およびミリ秒単位のtimestamp に分割する必要があります。position は、ターゲットの座標系で指定されている必要があります。

戻り値は、イベントを呼び出し元のフィルタで処理する場合はtrue 、コントロールに転送する場合はfalse となります。

注: ほとんどのユースケースでは、grabGesture()を使用すれば 十分です。

[static] bool QScroller::hasScroller(QObject *target)

target に対してQScroller オブジェクトがすでに作成されている場合はtrue を返し、そうでない場合はfalse を返します。

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

QPointF QScroller::pixelPerMeter() const

スクロールされたウィジェットの「1メートルあたりのピクセル数」という指標を返します。

この値は、QPointF を使用して、x 軸と y 軸それぞれについて個別に報告されます。

注: この値は物理的に正しいものであることに注意してください 。Qtがディスプレイに対して返す実際のDPI設定は、基盤となるウィンドウシステム(例えばmacOSなど)によって意図的に誤って報告される場合があります。

[slot] void QScroller::resendPrepareEvent()

この関数は、QScrollPrepareEvent を再送信します。resendPrepareEventを呼び出すと、スクローラーからQScrollPrepareEvent がトリガーされます。これにより、受信側はスクロール中にコンテンツの位置やサイズを再設定できるようになります。非アクティブ状態のときにこの関数を呼び出しても意味がありません。スクロールが開始される前に、準備イベントが再度送信されるためです。

[slot] void QScroller::scrollTo(const QPointF &pos)

ビューポートの左上隅に点pos が来るよう、ウィジェットのスクロールを開始します。

有効なスクロール領域の外側をスクロールした場合の挙動は未定義です。この場合、スクロールがオーバーシュートする場合もあれば、しない場合もあります。

スクロール速度は、プラットフォームで定義された時間経過後に指定された位置に到達するように計算されます。

pos はビューポート座標で指定されます。

注:この スロットは オーバーロードされています。このスロットに接続するには:

// Connect using qOverload:
connect(sender, &SenderClass::signal,
        scroller, qOverload(&QScroller::scrollTo));

// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
        scroller, [receiver = scroller](const QPointF &pos) { receiver->scrollTo(pos); });
その他の例や手法については、「オーバーロードされたスロットへの接続」を参照してください。

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

[slot] void QScroller::scrollTo(const QPointF &pos, int scrollTime)

このバージョンは、scrollTime ミリ秒で目的の位置に到達します。

注:この スロットは オーバーロードされています。このスロットに接続するには:

// Connect using qOverload:
connect(sender, &SenderClass::signal,
        scroller, qOverload(&QScroller::scrollTo));

// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
        scroller, [receiver = scroller](const QPointF &pos, int scrollTime) { receiver->scrollTo(pos, scrollTime); });
その他の例や手法については、「オーバーロードされたスロットへの接続」を参照してください。

[static] QScroller *QScroller::scroller(QObject *target)

指定されたtarget に対応するスクローラーを返します。オブジェクトが存在する限り、この関数は常に同じQScroller インスタンスを返します。target に対応するQScroller が存在しない場合、暗黙的に作成されます。1つのオブジェクトに対して、QScroller が同時に複数アクティブになることはありません。

hasScroller() およびtarget()も参照してください 。

[static] const QScroller *QScroller::scroller(const QObject *target)

これは scroller() の const バージョンです。

これはオーバーロードされた関数です。

[signal] void QScroller::scrollerPropertiesChanged(const QScrollerProperties &newProperties)

QScroller スクローラーのプロパティが変更されるたびに、このシグナルを発行します。newProperties は、新しいスクローラーのプロパティです。

注: プロパティ `scrollerProperties` に対するNotifier シグナルです。

「scrollerProperties」も参照してください 。

void QScroller::setSnapPositionsX(const QList<qreal> &positions)

水平軸のスナップ位置を、positions のリストに設定します。これにより、以前に設定されたすべてのスナップ位置およびスナップ間隔が上書きされます。スナップ機能を無効にするには、位置のリストを空に設定します。

void QScroller::setSnapPositionsX(qreal first, qreal interval)

横軸のスナップ位置を等間隔に設定します。最初のスナップ位置はfirst です。次のスナップ位置はfirst +interval です。これを利用してリストの見出しを実装できます。この設定を行うと、以前に設定されたすべてのスナップ位置およびスナップ間隔が上書きされます。間隔を0.0に設定することで、スナップ機能を無効にできます。

void QScroller::setSnapPositionsY(const QList<qreal> &positions)

垂直軸のスナップ位置を、positions のリストに設定します。これにより、以前に設定されたすべてのスナップ位置およびスナップ間隔が上書きされます。位置のリストを空にすることで、スナップ機能を無効にすることができます。

void QScroller::setSnapPositionsY(qreal first, qreal interval)

垂直軸のスナップ位置を等間隔に設定します。最初のスナップ位置はfirst です。次のスナップ位置はfirst +interval です。これにより、以前に設定されたすべてのスナップ位置およびスナップ間隔が上書きされます。間隔を0.0に設定することで、スナップ機能を無効にすることができます。

[signal] void QScroller::stateChanged(QScroller::State newState)

QScroller 状態が変化するたびにこのシグナルを発生させます。newState は新しい状態です。

注: プロパティ `state`の通知 シグナルです。

「state」も参照してください 。

void QScroller::stop()

スクロールバーを停止し、その状態を「非アクティブ」に戻します。

QObject *QScroller::target() const

このスクロラーのターゲットオブジェクトを返します。

hasScroller() およびscroller()も参照してください 。

[static] void QScroller::ungrabGesture(QObject *target)

target のジェスチャーを解放します。ジェスチャーが取得されていない場合は、何も行いません。

grabGesture() およびgrabbedGesture()も参照してください 。

QPointF QScroller::velocity() const

状態が「Scrolling」または「Dragging」の場合、現在のスクロール速度をメートル毎秒単位で返します。それ以外の場合は、速度をゼロとして返します。

QPointF を使用することで、x 軸と y 軸の速度がそれぞれ個別に報告されます。

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

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