QScroller Class

QScroller 클래스는 모든 스크롤 위젯이나 그래픽 항목에 키네틱 스크롤을 지원합니다. 더 보기...

Header: #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 타이머를 사용하여 QScrollEvents를 생성합니다. 이는 QScroller별로 QScrollerProperties::FrameRate 로 변경할 수 있습니다.

이 키네틱 스크롤러에는 QScrollerProperties 을 통해 사용할 수 있는 많은 설정이 있지만 모두 플랫폼에 최적화된 기본값으로 두는 것이 좋습니다. 변경하기 전에 scroller 예제 디렉토리에 있는 plot 예제로 실험해 볼 수 있습니다.

QScrollEvent, QScrollPrepareEvent, QScrollerProperties도 참조하세요 .

회원 유형 문서

enum QScroller::Input

이 열거형에는 QScroller 에 관련된 입력 이벤트에 대한 입력 장치에 구애받지 않는 보기가 포함되어 있습니다.

Constant설명
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 제스처 인식기가 지원하는 다양한 제스처 유형이 포함되어 있습니다.

Constant설명
QScroller::TouchGesture0제스처 인식기는 터치 이벤트에서만 트리거됩니다. 구체적으로 터치 스크린을 사용할 때는 단일 터치 포인트에, 터치패드를 사용할 때는 이중 터치 포인트에 반응합니다.
QScroller::LeftMouseButtonGesture1제스처 인식기는 마우스 왼쪽 버튼 이벤트에만 트리거됩니다.
QScroller::MiddleMouseButtonGesture3제스처 인식기는 마우스 가운데 버튼 이벤트에만 트리거됩니다.
QScroller::RightMouseButtonGesture2제스처 인식기는 마우스 오른쪽 버튼 이벤트에만 트리거됩니다.

enum QScroller::State

이 열거형에는 다양한 QScroller 상태가 포함되어 있습니다.

Constant설명
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 : 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 이 보이도록 스크롤을 시작하고 직사각형 주위에 xmarginymargin 으로 픽셀 단위로 여백을 추가합니다.

뷰포트 내부에 직사각형과 여백을 맞출 수 없는 경우 rect 에서 가능한 한 많은 내용이 보이도록 스크롤됩니다.

스크롤 속도는 플랫폼에서 정의한 시간 간격 후에 지정된 위치에 도달하도록 계산됩니다.

이 함수는 scrollTo()를 호출하여 실제 스크롤을 수행합니다.

scrollTo()도 참조하세요 .

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

과부하가 걸린 함수입니다.

이 버전은 scrollTime 밀리초 내에 대상 위치에 도달합니다.

QPointF QScroller::finalPosition() const

현재 스크롤 이동에 대한 예상 최종 위치를 반환합니다. 스크롤 상태가 스크롤 중이 아닌 경우 현재 위치를 반환합니다. 스크롤 상태가 비활성 상태인 경우 결과는 정의되지 않습니다.

목표 위치는 픽셀 단위입니다.

pixelPerMeter() 및 scrollTo()도 참조하세요 .

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

사용자 지정 스크롤 제스처 인식기를 등록하고 target 에 대한 제스처를 가져와서 결과 제스처 유형을 반환합니다. scrollGestureTypeTouchGesture 로 설정된 경우 제스처는 터치 이벤트에서 트리거됩니다. LeftMouseButtonGesture , RightMouseButtonGesture 또는 MiddleMouseButtonGesture 중 하나로 설정된 경우 해당 버튼의 마우스 이벤트에 트리거됩니다.

하나의 개체에서는 동시에 하나의 스크롤 제스처만 활성화할 수 있습니다. 동일한 개체에서 이 함수를 두 번 호출하면 새 제스처를 잡기 전에 기존 제스처를 해제합니다.

참고: 원치 않는 부작용을 방지하기 위해 제스처가 트리거되는 동안 마우스 이벤트가 소비됩니다. 초기 마우스 누르기 이벤트는 소비되지 않으므로 제스처는 글로벌 위치 (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

스크롤된 위젯의 미터당 픽셀 메트릭을 반환합니다.

이 값은 QPointF 을 사용하여 x축과 y축에 대해 개별적으로 보고됩니다.

참고: 이 값은 물리적으로 정확해야 합니다. Qt가 디스플레이에 대해 반환하는 실제 DPI 설정은 macOS와 같은 기본 창 시스템에 의해 의도적으로 잘못 보고될 수 있습니다.

[slot] void QScroller::resendPrepareEvent()

이 함수는 QScrollPrepareEvent 를 재전송합니다. resendPrepareEvent를 호출하면 스크롤러에서 QScrollPrepareEvent 가 트리거됩니다. 이를 통해 수신자는 스크롤하는 동안 콘텐츠 위치와 콘텐츠 크기를 다시 설정할 수 있습니다. 비활성 상태에서 이 함수를 호출하면 스크롤이 시작되기 전에 준비 이벤트가 다시 전송되므로 쓸모가 없습니다.

[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 이 존재하지 않으면 암시적으로 하나가 생성됩니다. 어떤 경우에도 객체에서 두 개 이상의 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()

스크롤러를 중지하고 상태를 다시 비활성으로 재설정합니다.

QObject *QScroller::target() const

이 스크롤러의 대상 객체를 반환합니다.

hasScroller() 및 scroller()도 참조하세요 .

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

target 에 대한 제스처를 잡습니다. 제스처가 잡히지 않으면 아무 작업도 수행하지 않습니다.

grabGesture() 및 grabbedGesture()도 참조하세요 .

QPointF QScroller::velocity() const

상태가 스크롤 또는 드래그일 때 현재 스크롤 속도를 초당 미터 단위로 반환합니다. 그렇지 않으면 0 속도를 반환합니다.

속도는 QPointF 을 사용하여 x축과 y축 모두에 대해 별도로 보고됩니다.

pixelPerMeter()도 참조하세요 .

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