Flickable QML Type

"튕길" 수 있는 표면을 제공합니다. 더 보기...

Import Statement: import QtQuick
Inherits:

Item

Inherited By:

GridView, ListView, and TableView

속성

신호

방법

자세한 설명

플릭 가능한 항목은 끌어서 쓸어 넘길 수 있는 표면에 자식을 배치하여 자식 항목에 대한 보기가 스크롤되도록 합니다. 이 동작은 ListViewGridView 과 같이 많은 수의 하위 항목을 표시하도록 설계된 항목의 기초를 형성합니다.

기존 사용자 인터페이스에서는 스크롤 막대 및 화살표 버튼과 같은 표준 컨트롤을 사용하여 뷰를 스크롤할 수 있습니다. 경우에 따라 커서를 이동하면서 마우스 버튼을 길게 눌러 뷰를 직접 드래그할 수도 있습니다. 터치 기반 사용자 인터페이스에서 이러한 드래그 동작은 사용자가 뷰 터치를 중단한 후에도 스크롤이 계속되는 플리킹 동작으로 보완되는 경우가 많습니다.

플리커블은 자동으로 내용을 잘라내지 않습니다. 전체 화면 항목으로 사용하지 않는 경우 clip 속성을 true로 설정하는 것이 좋습니다.

사용 예

다음 예는 사용자가 이미지를 끌거나 플릭하여 이미지의 다른 부분을 볼 수 있는 큰 이미지에 작은 보기를 표시하는 예입니다.

import QtQuick

Flickable {
    width: 200; height: 200
    contentWidth: image.width; contentHeight: image.height

    Image { id: image; source: "bigImage.png" }
}

플리커블의 자식으로 선언된 항목은 자동으로 플리커블의 contentItem 에 부모가 됩니다. 일반적으로 관련성이 있는 것은 contentItem 의 하위 항목이므로 플리커블의 하위 항목에 대해 작업할 때 이 점을 고려해야 합니다. 예를 들어, 플릭커블에 추가된 아이템의 바인딩은 다음과 같이 사용할 수 있습니다. contentItem.childrenRect

contentX 및 contentY의 예

다음 이미지는 플리커블을 다양한 방향으로 플릭하는 모습과 그 결과인 contentXcontentY 값을 보여줍니다. 파란색 사각형은 플릭커블의 콘텐츠를 나타내고 검은색 테두리는 플릭커블의 경계를 나타냅니다.

contentXcontentY 은 모두 0 입니다.

contentXcontentY 은 모두 50 입니다.

contentX-50 이고 contentY50 입니다.

contentXcontentY 은 모두 -50 입니다.

contentX50 이며 contentY-50 입니다.

제한 사항

참고: 구현 세부 사항으로 인해 플릭커블 안에 배치된 항목은 플릭커블에 앵커링할 수 없습니다. 대신 플릭커블의 contentItem 을 참조하는 parent 을 사용하세요. 콘텐츠 항목의 크기는 contentWidthcontentHeight 에 의해 결정됩니다.

속성 문서

contentX : real

contentY : real

이 속성은 현재 플릭 가능의 왼쪽 상단 모서리에 있는 표면 좌표를 유지합니다. 예를 들어 이미지를 100픽셀 위로 플릭하면 contentY 이 100만큼 증가합니다.

참고: 리바운드 애니메이션 후 원점(왼쪽 상단 모서리)으로 다시 플릭하면 contentXoriginX 과 같은 값으로, contentYoriginY 으로 설정됩니다. 일반적으로 (0,0) 이지만 ListViewGridView 은 델리게이트 크기 변화 또는 보이는 영역 외부의 항목 삽입/제거로 인해 임의의 원점을 가질 수 있습니다. 따라서 세로 스크롤바 같은 것을 구현하려면 y: (contentY - originY) * (height / contentHeight) 를 위치에 사용하고 visibleArea 의 정규화된 값을 사용하는 것도 한 가지 방법입니다.

Examples of contentX and contentY, originX, originY참조하세요 .


horizontalVelocity : real [read-only]

verticalVelocity : real [read-only]

x축과 y축을 따라 이동하는 순간 속도(픽셀/초)입니다.

보고된 속도는 불규칙한 출력을 피하기 위해 평활화됩니다.

콘텐츠 크기가 큰 뷰(뷰 크기의 10배 이상)의 경우 여러 번 빠르게 연속으로 플릭하는 경우 플릭 속도가 터치 속도를 초과할 수 있다는 점에 유의하세요. 이를 통해 사용자는 큰 콘텐츠를 더 빠르게 넘길 수 있습니다.


atXBeginning : bool [read-only]

atXEnd : bool [read-only]

atYBeginning : bool [read-only]

atYEnd : bool [read-only]

이러한 속성은 플릭 가능한 보기가 각각 시작 또는 끝에 위치하는 경우에 해당합니다.


contentHeight : real

contentWidth : real

콘텐츠의 크기(플릭블로 제어되는 표면)입니다. 일반적으로 플리커블에 배치된 항목의 크기를 합친 값으로 설정해야 합니다.

다음 스니펫은 이러한 속성을 사용하여 플릭 가능한 항목 자체보다 큰 이미지를 표시하는 방법을 보여줍니다:

import QtQuick

Flickable {
    width: 200; height: 200
    contentWidth: image.width; contentHeight: image.height

    Image { id: image; source: "bigImage.png" }
}

경우에 따라 콘텐츠 크기는 contentItemchildrenRect.widthchildrenRect.height 속성에 따라 자동으로 설정될 수 있습니다. 예를 들어, 이전 코드 조각을 다음과 같이 다시 작성할 수 있습니다:

contentWidth: contentItem.childrenRect.width; contentHeight: contentItem.childrenRect.height

단, 여기서는 childrenRect의 원점이 0,0이라고 가정합니다.


bottomMargin : real

leftMargin : real

rightMargin : real

topMargin : real

이러한 속성은 콘텐츠 주변의 여백을 유지합니다. 이 공간은 contentWidthcontentHeight 과 함께 예약되어 있습니다.


originX : real [read-only]

originY : real [read-only]

이 속성은 콘텐츠의 원점을 유지합니다. 이 값은 레이아웃 방향에 관계없이 항상 콘텐츠의 왼쪽 상단 위치를 나타냅니다.

일반적으로 (0,0)이지만 델리게이트 크기 변화 또는 보이는 영역 외부의 항목 삽입/제거로 인해 ListViewGridView 의 원점이 임의로 지정될 수 있습니다.

contentXcontentY참조하세요 .


flicking : bool [read-only]

flickingHorizontally : bool [read-only]

flickingVertically : bool [read-only]

이러한 속성은 사용자가 뷰를 넘겨서 뷰가 현재 가로, 세로 또는 어느 방향으로 이동하는지 여부를 설명합니다.


dragging : bool [read-only]

draggingHorizontally : bool [read-only]

draggingVertically : bool [read-only]

이러한 속성은 사용자가 뷰를 드래그하여 뷰가 현재 가로, 세로 또는 어느 방향으로 이동 중인지 여부를 설명합니다.


moving : bool [read-only]

movingHorizontally : bool [read-only]

movingVertically : bool [read-only]

이 속성은 사용자가 뷰를 드래그하거나 플릭하여 뷰가 현재 가로, 세로 또는 어느 방향으로 이동 중인지 여부를 나타냅니다.


boundsBehavior : enumeration

이 속성은 표면이 플릭 가능 경계를 넘어 드래그될 수 있는지 또는 플릭 시 플릭 가능 경계를 초과할 수 있는지를 나타냅니다.

boundsMovementFlickable.FollowBoundsBehavior 인 경우 Flickable.StopAtBounds 이외의 값은 뷰의 가장자리가 딱딱한 물리적 경계가 아닌 부드러운 느낌을 줍니다.

boundsBehavior 중 하나가 될 수 있습니다:

  • Flickable.StopAtBounds - 콘텐츠를 플릭 가능한 경계를 넘어 드래그할 수 없으며, 플릭이 오버슈팅되지 않습니다.
  • Flickable.DragOverBounds - 콘텐츠를 플릭커블의 경계를 넘어 드래그할 수 있지만 플릭이 오버슈팅되지 않습니다.
  • Flickable.OvershootBounds - 콘텐츠를 플릭할 때 경계를 초과할 수 있지만, 플릭 가능한 경계를 넘어 콘텐츠를 드래그할 수 없습니다. ( QtQuick 2.5 이후)
  • Flickable.DragAndOvershootBounds(기본값) - 콘텐츠를 플릭커블의 경계를 넘어 드래그할 수 있으며, 플릭 시 경계를 초과할 수 있습니다.

horizontalOvershoot, verticalOvershoot, boundsMovement참조하세요 .


boundsMovement : enumeration

이 속성은 뷰의 가장자리가 딱딱한 물리적 경계가 아닌 부드러운 느낌을 주는 플릭 가능한지 여부를 지정합니다.

boundsMovement 중 하나가 될 수 있습니다:

  • Flickable.StopAtBounds - 콘텐츠가 플리커블의 경계를 넘어 드래그 또는 플릭을 따르지 않는 사용자 지정 가장자리 효과를 구현할 수 있습니다. horizontalOvershootverticalOvershoot 값을 사용하여 사용자 정의 가장자리 효과를 구현할 수 있습니다.
  • Flickable.FollowBoundsBehavior(기본값) - 콘텐츠가 드래그를 따르거나 플리커블의 경계를 넘어 플릭할지 여부는 boundsBehavior 에 의해 결정됩니다.

다음 예제는 콘텐츠를 바운드 내에 유지하고 대신 가로 바운드를 넘길 때 플립 효과를 적용합니다:

Flickable {
    id: flickable
    boundsMovement: Flickable.StopAtBounds
    boundsBehavior: Flickable.DragAndOvershootBounds
    transform: Rotation {
        axis { x: 0; y: 1; z: 0 }
        origin.x: flickable.width / 2
        origin.y: flickable.height / 2
        angle: Math.min(30, Math.max(-30, flickable.horizontalOvershoot))
    }
}

다음 예제는 콘텐츠를 경계 내에 유지하고 대신 수직 경계 위로 드래그하면 불투명도 효과를 적용합니다:

Flickable {
    boundsMovement: Flickable.StopAtBounds
    boundsBehavior: Flickable.DragOverBounds
    opacity: Math.max(0.5, 1.0 - Math.abs(verticalOvershoot) / height)
}

boundsBehavior, verticalOvershoot, horizontalOvershoot참조하세요 .


contentItem : Item [read-only]

플릭 가능한 항목에서 이동할 항목을 포함하는 내부 항목입니다.

플리커블의 자식으로 선언된 항목은 자동으로 플리커블의 contentItem에 부모가 됩니다.

동적으로 생성된 아이템은 명시적으로 contentItem에 부모를 지정해야 합니다:

Flickable {
    id: myFlickable
    function addItem(file) {
        var component = Qt.createComponent(file)
        component.createObject(myFlickable.contentItem);
    }
}

flickDeceleration : real

이 속성은 플릭이 감속되는 속도를 유지합니다. 숫자가 높을수록 사용자가 터치를 통해 플릭을 멈출 때 속도가 느려집니다. 예를 들어 0.0001은 거의 "마찰이 없는" 수준이고 10000은 상당히 "끈적끈적한" 느낌입니다.

기본값은 플랫폼에 따라 다릅니다. 0 이하의 값은 허용되지 않습니다.


flickableDirection : enumeration

이 속성은 뷰를 쓸어 넘길 수 있는 방향을 결정합니다.

  • Flickable.AutoFlickDirection(기본값) - 콘텐츠 높이가 플릭 가능 높이와 같지 않은 경우 세로로 플릭할 수 있습니다. contentWidth가 플리커블의 너비와 같지 않은 경우 가로로 플리킹을 허용합니다.
  • Flickable.AutoFlickIfNeeded - contentHeight가 Flickable의 높이보다 크면 수직으로 플릭할 수 있습니다. contentWidth가 플릭 가능 너비보다 크면 가로로 플릭을 허용합니다. ( QtQuick 2.7 이후)
  • Flickable.HorizontalFlick - 가로로 플릭할 수 있습니다.
  • Flickable.VerticalFlick - 세로로 쓸어 넘길 수 있습니다.
  • Flickable.HorizontalAndVerticalFlick - 양방향으로 플릭할 수 있습니다.

horizontalOvershoot : real [read-only]

이 속성은 수평 오버슈트, 즉 콘텐츠가 플리커블의 경계를 넘어 드래그 또는 플릭된 수평 거리를 보유합니다. 콘텐츠가 시작 부분을 넘어 드래그하거나 플릭하면 음수, 끝 부분을 넘어가면 양수( 0.0 )가 됩니다.

드래그 및/또는 플릭에 대해 값이 보고되는지 여부는 boundsBehavior 에 의해 결정됩니다. boundsMovementFlickable.StopAtBounds 인 경우에도 오버슈트 거리가 보고됩니다.

verticalOvershoot, boundsBehavior, boundsMovement도 참조하세요 .


interactive : bool

이 프로퍼티는 사용자가 플릭커블과 상호작용할 수 있는지 여부를 설명합니다. 인터랙티브하지 않은 플릭커블은 사용자가 드래그하거나 플릭할 수 없습니다.

기본적으로 이 속성은 true입니다.

이 속성은 일시적으로 플릭을 비활성화하는 데 유용합니다. 예를 들어 플릭커블의 자식인 팝업 대화 상자를 스크롤하는 동안 플릭커블 맵을 고정하고 싶을 때 이 속성을 사용하면 플릭커블의 자식과 특별한 상호작용을 할 수 있습니다.


maximumFlickVelocity : real

이 속성은 사용자가 뷰를 넘길 수 있는 최대 속도(픽셀/초)를 보유합니다.

기본값은 플랫폼에 따라 다릅니다.


pixelAligned : bool

이 속성은 contentXcontentY 의 정렬을 픽셀(true) 또는 서브픽셀(false)로 설정합니다.

정지된 콘텐츠 또는 1픽셀 너비의 선, 텍스트 또는 벡터 그래픽과 같이 대비가 높은 가장자리가 있는 움직이는 콘텐츠에 최적화하려면 pixelAligned를 활성화합니다. 애니메이션 품질에 맞게 최적화할 때는 pixelAligned를 비활성화합니다.

기본값은 false 입니다.


pressDelay : int

이 프로퍼티는 플릭커블의 자식에게 프레스를 전달할 지연 시간(ms)을 보유합니다. 이 속성은 플릭 동작 전에 프레스에 반응하면 원치 않는 효과가 발생하는 경우에 유용할 수 있습니다.

지연 시간이 초과되기 전에 플릭커블을 드래그/플릭하면 누르기 이벤트가 전달되지 않습니다. 시간 제한 내에 버튼을 놓으면 누르는 동작과 놓는 동작이 모두 전달됩니다.

pressDelay가 설정된 중첩된 플릭커블의 경우, 바깥쪽 플릭커블의 pressDelay는 가장 안쪽 플릭커블에 의해 재정의된다는 점에 유의하세요. 드래그가 플랫폼 드래그 임계값을 초과하면 이 프로퍼티와 상관없이 프레스 이벤트가 전달됩니다.

QStyleHints참조하세요 .


rebound : Transition

이렇게 하면 콘텐츠 뷰가 플릭 가능한 범위로 다시 스냅될 때 전환이 콘텐츠 뷰에 적용되도록 유지됩니다. 전환은 뷰를 플릭하거나 콘텐츠 영역의 가장자리를 지나 드래그하거나 returnToBounds()가 호출될 때 트리거됩니다.

import QtQuick 2.0

Flickable {
    width: 150; height: 150
    contentWidth: 300; contentHeight: 300

    rebound: Transition {
        NumberAnimation {
            properties: "x,y"
            duration: 1000
            easing.type: Easing.OutBounce
        }
    }

    Rectangle {
        width: 300; height: 300
        gradient: Gradient {
            GradientStop { position: 0.0; color: "lightsteelblue" }
            GradientStop { position: 1.0; color: "blue" }
        }
    }
}

위의 뷰가 경계를 벗어나면 지정된 전환을 사용하여 해당 경계로 돌아갑니다:

이 속성을 설정하지 않으면 기본 애니메이션이 적용됩니다.


synchronousDrag : bool

이 속성을 true로 설정하면 마우스 또는 터치포인트가 콘텐츠를 끌기 시작할 만큼 충분히 멀리 이동하면 콘텐츠가 점프하여 누를 때 커서 또는 터치포인트 아래에 있던 콘텐츠 픽셀이 해당 지점 아래에 유지되도록 합니다.

기본값은 false 으로, 처음에 드래그 거리의 일부가 "손실"되는 대신 더 부드러운 경험(점프 없음)을 제공합니다.


verticalOvershoot : real [read-only]

이 속성은 수직 오버슈트, 즉 콘텐츠가 플릭 가능 영역의 경계를 넘어 드래그 또는 플릭된 수직 거리를 보유합니다. 콘텐츠가 시작 부분을 넘어 드래그하거나 플릭하면 음수, 끝 부분을 넘어가면 양수( 0.0 )가 됩니다.

드래그 및/또는 플릭에 대해 값이 보고되는지 여부는 boundsBehavior 에 의해 결정됩니다. boundsMovementFlickable.StopAtBounds 인 경우에도 오버슈트 거리가 보고됩니다.

horizontalOvershoot, boundsBehavior, boundsMovement도 참조하세요 .


visibleArea group

visibleArea.heightRatio : real [read-only]

visibleArea.widthRatio : real [read-only]

visibleArea.xPosition : real [read-only]

visibleArea.yPosition : real [read-only]

이러한 속성은 현재 보고 있는 영역의 위치와 크기를 설명합니다. 크기는 현재 표시되는 전체 보기의 백분율로 정의되며 0.0 - 1.0으로 스케일링됩니다. 페이지 위치는 일반적으로 0.0(시작)에서 크기 비율을 뺀 1.0(끝)의 범위(예: yPosition 0.0~1.0-heightRatio)에 있습니다. 그러나 콘텐츠를 정상 범위 밖으로 끌면 페이지 위치도 정상 범위를 벗어날 수 있습니다.

이러한 속성은 일반적으로 스크롤바를 그리는 데 사용됩니다. 예를 들어

Rectangle {
    width: 200; height: 200

    Flickable {
        id: flickable
        ...
    }

    Rectangle {
        id: scrollbar
        anchors.right: flickable.right
        y: flickable.visibleArea.yPosition * flickable.height
        width: 10
        height: flickable.visibleArea.heightRatio * flickable.height
        color: "black"
    }
}

문서 신호

dragEnded()

이 신호는 사용자가 뷰 드래그를 중지할 때 발생합니다.

터치/마우스 버튼에서 손을 뗄 때 드래그 속도가 충분하면 플릭이 시작됩니다.

참고: 해당 핸들러는 onDragEnded 입니다.


dragStarted()

이 신호는 사용자 상호 작용으로 인해 뷰가 드래그되기 시작할 때 발생합니다.

참고: 해당 핸들러는 onDragStarted 입니다.


flickEnded()

이 신호는 뷰를 밀거나 연속으로 밀고 나서 뷰의 이동이 중지될 때 발생합니다.

참고: 해당 핸들러는 onFlickEnded 입니다.


flickStarted()

이 신호는 뷰를 플릭할 때 발생합니다. 플릭은 마우스 또는 터치를 놓는 시점부터 시작되며, 여전히 움직이고 있는 상태에서 시작됩니다.

참고: 해당 핸들러는 onFlickStarted 입니다.


movementEnded()

이 신호는 사용자 상호 작용 또는 생성된 flick()로 인해 뷰가 움직임을 멈출 때 발생합니다. 플릭이 활성화된 경우 플릭이 중지되면 이 신호가 발생합니다. 플릭이 활성화되지 않은 경우 이 신호는 사용자가 드래그를 중지할 때(예: 마우스 또는 터치 해제) 발생합니다.

참고: 해당 핸들러는 onMovementEnded 입니다.


movementStarted()

이 신호는 사용자 상호 작용 또는 생성된 flick()로 인해 뷰가 움직이기 시작할 때 발생합니다.

참고: 해당 핸들러는 onMovementStarted 입니다.


메서드 문서

cancelFlick()

현재 플릭 애니메이션을 취소합니다.


flick(qreal xVelocity, qreal yVelocity)

콘텐츠를 가로로 xVelocity, 세로로 yVelocity 픽셀/초 단위로 플릭합니다.

이 메서드를 호출하면 실제 터치스크린 플릭처럼 해당 이동 및 플릭 프로퍼티와 신호가 업데이트됩니다.


resizeContent(real width, real height, QPointF center)

center 에 대해 콘텐츠 크기를 width x height 로 조정합니다.

플릭 가능 콘텐츠의 크기는 조정하지 않고 contentWidthcontentHeight 의 크기만 조정합니다.

콘텐츠 크기를 조정하면 콘텐츠가 플리커블의 범위를 벗어난 위치에 배치될 수 있습니다. returnToBounds ()를 호출하면 콘텐츠가 법적 범위 내로 다시 이동합니다.


returnToBounds()

콘텐츠가 법적 범위 내에 있는지 확인합니다.

콘텐츠를 수동으로 배치한 후 콘텐츠가 법적 범위 내에 있는지 확인하기 위해 호출할 수 있습니다.


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