QScroller Class
QScroller クラスは、スクロールウィジェットやグラフィックアイテムのキネティックスクロールを可能にします。詳細...
Header: | #include <QScroller> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake: | QT += widgets |
Inherits: | QObject |
パブリックタイプ
enum | Input { InputPress, InputMove, InputRelease } |
enum | ScrollerGestureType { TouchGesture, LeftMouseButtonGesture, MiddleMouseButtonGesture, RightMouseButtonGesture } |
enum | State { Inactive, Pressed, Dragging, Scrolling } |
プロパティ
- scrollerProperties : QScrollerProperties
- state : const State
パブリック関数
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 。
QScrollEventを生成するために、スクローラーはグローバルなQAbstractAnimation タイマーを使用します。これは、QScrollerProperties::FrameRate 、QScrollerごとに変更できます。
このキネティックスクローラーには、QScrollerProperties から利用可能な多数の設定がありますが、すべてデフォルトの、プラットフォームに最適化された値のままにしておくことをお勧めします。設定を変更する前に、scroller
examples ディレクトリにあるplot
サンプルで実験することができます。
QScrollEvent 、QScrollPrepareEvent 、QScrollerPropertiesも参照のこと 。
メンバ型ドキュメント
enum QScroller::Input
この列挙型は、QScroller に関連する入力イベントの、入力デバイスに依存しないビューを含んでいます。
定数 | 値 | 説明 |
---|---|---|
QScroller::InputPress | 1 | ユーザが入力デバイスを押した (例:QEvent::MouseButtonPress,QEvent::GraphicsSceneMousePress,QEvent::TouchBegin) |
QScroller::InputMove | 2 | ユーザが入力デバイスを動かした (例:QEvent::MouseMove,QEvent::GraphicsSceneMouseMove,QEvent::TouchUpdate) |
QScroller::InputRelease | 3 | ユーザーが入力デバイスを離した (例:QEvent::MouseButtonRelease,QEvent::GraphicsSceneMouseRelease,QEvent::TouchEnd) |
enum QScroller::ScrollerGestureType
この列挙型には、QScroller ジェスチャ認識機能でサポートされるさまざまなジェスチャの種類が含まれます。
定数 | 値 | 説明 |
---|---|---|
QScroller::TouchGesture | 0 | ジェスチャー認識機能は、タッチイベントでのみトリガーされます。具体的には、タッチスクリーンを使用している場合はシングル・タッチ・ポイント、タッチパッドを使用している場合はデュアル・タッチ・ポイントに反応します。 |
QScroller::LeftMouseButtonGesture | 1 | ジェスチャレコグナイザは、マウスの左ボタンイベントでのみトリガされます。 |
QScroller::MiddleMouseButtonGesture | 3 | ジェスチャー認識機能は、マウスの中ボタンイベントでのみトリガーされます。 |
QScroller::RightMouseButtonGesture | 2 | ジェスチャレコグナイザは、マウスの右ボタンイベントでのみトリガされます。 |
enum QScroller::State
この列挙型には、QScroller の各状態が含まれます。
定数 | 値 | 説明 |
---|---|---|
QScroller::Inactive | 0 | スクローラーはスクロールしておらず、何も押されていない。 |
QScroller::Pressed | 1 | タッチイベントを受信したか、マウスボタンが押されたが、スクロール領域は現在ドラッグされていない。 |
QScroller::Dragging | 2 | スクロールエリアがタッチポイントまたはマウスに追従している。 |
QScroller::Scrolling | 3 | スクロールエリアが勝手に動いている。 |
プロパティの説明
scrollerProperties : QScrollerProperties
このプロパティは、このスクローラのスクローラプロパティを保持する。このプロパティはQScroller によって使用され、スクロールの動作を決定します。
アクセス関数
QScrollerProperties | scrollerProperties() const |
void | setScrollerProperties(const QScrollerProperties &prop) |
通知シグナル
void | scrollerPropertiesChanged(const QScrollerProperties &newProperties) |
[read-only]
state : const State
このプロパティは、スクローラーの状態を保持します。
アクセス関数
QScroller::State | state() const |
ノーティファイアシグナル:
void | stateChanged(QScroller::State newState) |
QScroller::Stateも参照 。
メンバ関数ドキュメント
[static]
QList<QScroller *> QScroller::activeScrollers()
現在アクティブなQScroller オブジェクトのアプリケーション全体のリストを返す。アクティブなQScroller オブジェクトはQScroller::Inactive 以外のstate() にあります。この関数は、独自のジェスチャー認識器を書くときに便利です。
[slot]
void QScroller::ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin)
矩形rect がビューポート内に見えるようにスクロールを開始し、矩形の周囲にxmargin とymargin でピクセル単位で指定された余白を追加します。
矩形と余白をビューポート内に収めることができない場合、コンテンツはrect から可能な限り見えるようにスクロールされます。
スクロール速度は、プラットフォームで定義された時間経過後に指定された位置に到達するように計算される。
この関数は、scrollTo ()を呼び出すことで、実際のスクロールを実行する。
scrollTo()も参照 。
[slot]
void QScroller::ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin, int scrollTime)
これはオーバーロードされた関数である。
このバージョンは、scrollTime ミリ秒で目的位置に到達する。
QPointF QScroller::finalPosition() const
現在のスクロール移動の推定最終位置を返します。スクロールの状態が Scrolling でない場合は、現在の位置を返します。スクローラーの状態がInactiveの場合、結果は未定義です。
目標位置の単位は pixel です。
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)
QScroller オブジェクトがすでにtarget に対して作成されている場合はtrue
を返し、そうでない場合はfalse
を返します。
scroller()も参照 。
QPointF QScroller::pixelPerMeter() const
スクロールされたウィジェットの1メートルあたりのピクセル数を返します。
この値は、QPointF を使用することで、x軸とy軸の両方について別々に報告されます。
注意: この値は物理的に正しい値でなければならないことに注意してください。Qt がディスプレイに対して返す実際の DPI 設定は、macOS などの基本的なウィンドウシステムによって、意図的に間違って報告されることがあります。
[slot]
void QScroller::resendPrepareEvent()
この関数はQScrollPrepareEvent を再送します。 resendPrepareEvent を呼び出すと、スクローラーからQScrollPrepareEvent がトリガーされます。これにより、受信者はスクロール中にコンテンツの位置とサイズを再設定できる。スクロールが開始する前に prepare イベントが再度送信されるため、Inactive 状態でこの関数を呼び出しても意味がない。
[slot]
void QScroller::scrollTo(const QPointF &pos)
ポイントpos がビューポートの左上の位置になるように、ウィジェットのスクロールを開始します。
有効なスクロール領域の外側をスクロールする場合の動作は未定義です。この場合、スクロールはオーバーシュートするかもしれませんし、しないかもしれません。
スクロール速度は、プラットフォームで定義された時間経過後に指定された位置に到達するように計算されます。
pos はビューポート座標で指定します。
ensureVisible()も参照してください 。
[slot]
void QScroller::scrollTo(const QPointF &pos, int scrollTime)
これはオーバーロードされた関数である。
このバージョンは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 プロパティに対するノーティファイア・シグナル。
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()
スクロールを停止し、状態を Inactive に戻します。
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()も参照してください 。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。