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 } |
속성
- scrollerProperties : QScrollerProperties
- state : 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 *scroller = QScroller::scroller(w);
scroller->scrollTo(QPointF(100, 100));스크롤되는 QObject는 스크롤러가 기하학적 정보를 업데이트해야 할 때마다 ` QScrollPrepareEvent `를 수신하고, 객체의 콘텐츠가 실제로 스크롤되어야 할 때마다 ` QScrollEvent `를 수신합니다.
스크롤러는 전역 ` QAbstractAnimation ` 타이머를 사용하여 `QScrollEvents`를 생성합니다. 이는 ` QScrollerProperties::FrameRate `를 통해 QScroller별로 변경할 수 있습니다.
이 키네틱 스크롤러는 QScrollerProperties 를 통해 사용할 수 있는 설정이 매우 많지만, 모든 설정을 플랫폼에 최적화된 기본값으로 유지하는 것을 권장합니다. 설정을 변경하기 전에 scroller 예제 디렉터리에 있는 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 : 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 ` 중 하나로 설정된 경우, 해당 버튼의 마우스 이벤트 발생 시 트리거됩니다.
단일 객체에서 동시에 활성화될 수 있는 스크롤 제스처는 하나뿐입니다. 동일한 객체에서 이 함수를 두 번 호출하면, 새로운 제스처를 등록하기 전에 기존 제스처의 등록을 해제합니다.
참고: 원치 않는 부수 효과를 방지하기 위해 , 제스처가 트리거되는 동안 마우스 이벤트는 처리됩니다. 초기 마우스 클릭 이벤트는 처리되지 않으므로, 제스처는 전역 위치 (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 ’가 트리거됩니다. 이를 통해 수신자는 스크롤 중에 콘텐츠 위치와 크기를 재설정할 수 있습니다. 비활성(Inactive) 상태에서 이 함수를 호출하는 것은 무의미합니다. 스크롤이 시작되기 전에 prepare 이벤트가 다시 전송되기 때문입니다.
[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 `가 존재하지 않는 경우, 암시적으로 하나 생성됩니다. 어떤 객체에 대해서도 ` 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 에 대한Notifier 신호입니다.
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’일 때, 현재 스크롤 속도를 초당 미터 단위로 반환합니다. 그 외의 경우에는 속도 값을 0으로 반환합니다.
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.