PathView QML Type

모델 제공 항목을 경로에 배치합니다. 더 보기...

Import Statement: import QtQuick
Inherits:

Item

속성

첨부 속성

신호

방법

자세한 설명

PathView는 ListModelXmlListModel 과 같은 기본 제공 QML 유형 또는 QAbstractListModel 에서 상속하는 C++ 로 정의된 사용자 지정 모델 클래스에서 만든 모델의 데이터를 표시합니다.

뷰에는 표시할 데이터를 정의하는 model 과 데이터 표시 방법을 정의하는 delegate 이 있습니다. delegatepath 의 각 항목에 대해 인스턴스화됩니다. 항목을 플릭하여 경로를 따라 이동할 수 있습니다.

예를 들어 ContactModel.qml 파일에 다음과 같은 간단한 목록 모델이 정의되어 있다고 가정해 보겠습니다:

import QtQuick

ListModel {
    ListElement {
        name: "Bill Jones"
        icon: "pics/qtlogo.png"
    }
    ListElement {
        name: "Jane Doe"
        icon: "pics/qtlogo.png"
    }
    ListElement {
        name: "John Smith"
        icon: "pics/qtlogo.png"
    }
}

이 데이터는 다음과 같이 PathView로 표현할 수 있습니다:

import QtQuick

Rectangle {
    width: 240; height: 200

    Component {
        id: delegate
        Column {
            id: wrapper

            required property url icon
            required property string name

            opacity: PathView.isCurrentItem ? 1 : 0.5

            Image {
                anchors.horizontalCenter: nameText.horizontalCenter
                width: 64; height: 64
                source: wrapper.icon
            }
            Text {
                id: nameText
                text: wrapper.name
                font.pointSize: 16
            }
        }
    }

    PathView {
        anchors.fill: parent
        model: ContactModel {}
        delegate: delegate
        path: Path {
            startX: 120; startY: 100
            PathQuad { x: 120; y: 25; controlX: 260; controlY: 75 }
            PathQuad { x: 120; y: 100; controlX: -20; controlY: 75 }
        }
    }
}

(위의 예에서는 PathAttribute 을 사용하여 회전할 때 항목의 불투명도를 조정하고 수정합니다. 이 추가 코드는 PathAttribute 문서에서 확인할 수 있습니다.)

PathView는 키보드 탐색을 자동으로 처리하지 않습니다. 탐색에 사용할 키는 경로의 모양에 따라 달라지기 때문입니다. 예를 들어 왼쪽 및 오른쪽 화살표 키를 사용하여 탐색하려면 focustrue 으로 설정하고 decrementCurrentIndex() 또는 incrementCurrentIndex()을 호출하여 아주 간단하게 탐색을 추가할 수 있습니다:

PathView {
    // ...
    focus: true
    Keys.onLeftPressed: decrementCurrentIndex()
    Keys.onRightPressed: incrementCurrentIndex()
}

경로 보기 자체가 포커스 범위입니다(자세한 내용은 Qt Quick 의 키보드 포커스 참조).

델리게이트는 필요에 따라 인스턴스화되며 언제든지 삭제할 수 있습니다. 델리게이트에 상태를 저장해서는 안 됩니다.

PathView는 델리게이트의 루트 항목에 여러 프로퍼티를 첨부합니다(예: PathView.isCurrentItem). 다음 예제에서 루트 델리게이트 항목은 이 연결된 프로퍼티에 PathView.isCurrentItem 로 직접 액세스할 수 있지만, 하위 nameText 객체는 이 프로퍼티를 wrapper.PathView.isCurrentItem 로 참조해야 합니다.

    Component {
        id: delegate
        Column {
            id: wrapper

            required property url icon
            required property string name

            opacity: PathView.isCurrentItem ? 1 : 0.5

            Image {
                anchors.horizontalCenter: nameText.horizontalCenter
                width: 64; height: 64
                source: wrapper.icon
            }
            Text {
                id: nameText
                text: wrapper.name
                font.pointSize: 16
            }
        }
    }

뷰는 자동으로 스크랩을 활성화하지 않습니다. 뷰가 다른 항목이나 화면에 의해 잘리지 않는 경우 뷰에서 벗어난 항목이 잘리도록 하려면 clip: true를 설정해야 합니다.

Path, QML 데이터 모델, ListView, GridView, 및 Qt Quick 예제 - 뷰를참조하세요 .

속성 문서

highlightRangeMode : enumeration

preferredHighlightBegin : real

preferredHighlightEnd : real

이러한 속성은 뷰 내에서 하이라이트(현재 항목)의 기본 설정 범위를 설정합니다. 기본값은 0 ~ 1 범위여야 합니다.

유효한 값은 highlightRangeMode 입니다:

Constant설명
PathView.NoHighlightRange범위가 적용되지 않음: 하이라이트가 뷰 내에서 자유롭게 이동합니다.
PathView.ApplyRange뷰에서 하이라이트를 범위 내에 유지하려고 시도하지만 경로 끝에서 또는 마우스 상호 작용으로 인해 하이라이트가 범위 밖으로 이동할 수 있습니다.
PathView.StrictlyEnforceRange하이라이트가 범위 밖으로 이동하지 않습니다. 즉, 키보드 또는 마우스 동작으로 인해 하이라이트가 범위 밖으로 이동하는 경우 현재 항목이 변경됩니다.

기본값은 PathView.StrictlyEnforceRange입니다.

하이라이트 범위를 정의하는 것이 뷰가 이동할 때 현재 항목이 끝나는 위치에 영향을 미치는 올바른 방법입니다. 예를 들어 현재 선택된 항목이 경로의 중간에 위치하도록 하려면 하이라이트 범위를 0.5,0.5로 설정하고 highlightRangeModePathView.StrictlyEnforceRange로 설정합니다. 그러면 경로가 스크롤될 때 현재 선택된 항목이 해당 위치에 있는 항목이 됩니다. 이는 현재 선택된 항목이 변경될 때도 적용되며, 기본 설정된 강조 표시 범위 내로 스크롤됩니다. 또한 현재 항목 인덱스의 동작은 하이라이트가 존재하는지 여부에 관계없이 발생합니다.

참고: 유효한 범위는 preferredHighlightEndpreferredHighlightBegin 보다 크거나 같아야 합니다.


cacheItemCount : int

이 속성은 경로에서 캐시할 최대 항목 수를 보유합니다.

예를 들어, 20개의 항목이 포함된 모델 PathView, pathItemCount 10, cacheItemCount 4인 경우 최대 14개의 항목이 생성되며, 10개는 경로에 표시되고 4개는 보이지 않는 캐시된 항목이 됩니다.

캐시된 델리게이트는 비동기적으로 생성되므로 여러 프레임에 걸쳐 생성할 수 있고 프레임을 건너뛸 가능성이 줄어듭니다.

참고: 이 속성을 설정한다고 해서 효율적인 델리게이트를 만드는 것을 대체할 수는 없습니다. 추가 메모리 사용량을 희생하는 대신 스크롤 동작의 부드러움을 향상시킬 수 있습니다. 델리게이트의 개체 및 바인딩 수가 적을수록 뷰를 더 빠르게 스크롤할 수 있습니다. cacheItemCount 설정은 느리게 로드되는 델리게이트로 인해 발생하는 문제를 연기할 뿐 이 시나리오에 대한 해결책이 아니라는 점을 인식하는 것이 중요합니다.

pathItemCount참조하세요 .


count : int [read-only]

이 속성은 모델의 항목 수를 보유합니다.


currentIndex : int

이 속성은 현재 항목의 인덱스를 보유합니다.


currentItem : Item [read-only]

이 속성은 뷰의 현재 항목을 보유합니다.


delegate : Component

델리게이트는 뷰에 의해 인스턴스화된 각 항목을 정의하는 템플릿을 제공합니다. 인덱스는 액세스 가능한 index 속성으로 노출됩니다. 데이터 모델 유형에 따라 모델의 속성을 사용할 수도 있습니다.

델리게이트의 개체 및 바인딩 수는 pathItemCount 지정 시 뷰의 플릭 성능에 직접적인 영향을 미칩니다. 가능하면 델리게이트의 일반적인 표시에는 필요하지 않은 기능은 필요할 때 추가 구성 요소를 로드할 수 있는 Loader 에 배치합니다.

PathView 은 델리게이트의 루트 항목의 크기에 따라 항목을 레이아웃한다는 점에 유의하세요.

다음은 델리게이트의 예시입니다:

    Component {
        id: delegate
        Column {
            id: wrapper

            required property url icon
            required property string name

            opacity: PathView.isCurrentItem ? 1 : 0.5

            Image {
                anchors.horizontalCenter: nameText.horizontalCenter
                width: 64; height: 64
                source: wrapper.icon
            }
            Text {
                id: nameText
                text: wrapper.name
                font.pointSize: 16
            }
        }
    }

dragMargin : real

이 속성은 마우스 드래그를 시작하는 경로로부터의 최대 거리를 보유합니다.

기본적으로 경로는 항목을 클릭해야만 드래그할 수 있습니다. dragMargin이 0보다 크면 경로의 dragMargin 픽셀 내에서 클릭하여 드래그를 시작할 수 있습니다.


dragging : bool [read-only]

이 속성은 사용자가 뷰를 드래그하여 뷰가 현재 이동 중인지 여부를 유지합니다.


flickDeceleration : real

이 속성은 플릭이 감속되는 속도를 보유합니다.

기본값은 100입니다.


flicking : bool [read-only]

이 속성은 사용자가 뷰를 플릭하여 뷰가 현재 이동 중인지 여부를 보유합니다.


highlight : Component

이 속성은 하이라이트로 사용할 컴포넌트를 보유합니다.

각 뷰에 대해 하이라이트 컴포넌트의 인스턴스가 생성됩니다. 결과 컴포넌트 인스턴스의 지오메트리는 현재 항목을 유지하도록 뷰에서 관리됩니다.

아래 예는 간단한 하이라이트를 만드는 방법을 보여줍니다. 경로에서 멀어지면 하이라이트가 숨겨지도록 하기 위해 PathView.onPath 첨부 속성을 사용하는 것에 주목하세요.

Component {
    Rectangle {
        visible: PathView.onPath
        // ...
    }
}

highlightItemhighlightRangeMode도 참조하세요 .


highlightItem : Item [read-only]

highlightItemhighlight 컴포넌트에서 생성된 하이라이트 항목을 보유합니다.

highlight도 참조하세요 .


highlightMoveDuration : int

이 속성은 하이라이트 델리게이트의 이동 애니메이션 지속 시간을 보유합니다.

highlightRangeMode 가 StrictlyEnforceRange인 경우 이 속성은 항목이 경로를 따라 이동하는 속도를 결정합니다.

지속 시간의 기본값은 300밀리초입니다.


interactive : bool

사용자는 인터랙티브하지 않은 PathView 을 드래그하거나 플릭할 수 없습니다.

이 속성은 일시적으로 플릭을 비활성화하는 데 유용합니다. 이를 통해 PathView 의 하위 항목과 특별한 상호 작용이 가능합니다.


maximumFlickVelocity : real

이 속성은 사용자가 뷰를 쓸어 넘길 수 있는 대략적인 최대 속도를 초당 픽셀 단위로 보유합니다.

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


model : model

이 속성은 뷰에 대한 데이터를 제공하는 모델을 보유합니다.

모델은 뷰의 항목을 만드는 데 사용되는 데이터 집합을 제공합니다. 대규모 또는 동적 데이터 집합의 경우 모델은 일반적으로 C++ 모델 개체에 의해 제공됩니다. 모델은 ListModel 유형을 사용하여 QML에서 직접 만들 수도 있습니다.

참고: 모델을 변경하면 오프셋 및 currentIndex 이 0으로 재설정됩니다.

데이터 모델도참조하세요 .


movementDirection : enumeration

이 속성은 현재 인덱스를 설정할 때 항목이 이동하는 방향을 결정합니다. 가능한 값은 다음과 같습니다:

상수설명
PathView.Shortest(기본값): 항목이 가장 적은 이동이 필요한 방향으로 이동하며, Negative 또는 Positive 이 될 수 있습니다.
PathView.Negative항목이 목적지를 향해 뒤로 이동합니다.
PathView.Positive항목이 목적지를 향해 앞으로 이동합니다.

예를 들어 모델에 5개의 항목이 있고 currentIndex0 이라고 가정합니다. currentIndex2 으로 설정되어 있다고 가정합니다,

  • 로 설정하면 Positive 이동 방향은 다음과 같은 순서가 됩니다: 0, 1, 2
  • Negative 이동 방향은 다음과 같은 순서가 됩니다: 0, 5, 4, 3, 2
  • Shortest 이동 방향은 Positive 과 같은 순서가 됩니다.

참고: 이 속성은 incrementCurrentIndex() 및 decrementCurrentIndex()의 이동에는 영향을 주지 않습니다.


moving : bool [read-only]

이 속성은 사용자가 뷰를 드래그하거나 플릭하여 뷰가 현재 이동 중인지 여부를 유지합니다.


offset : real

오프셋은 항목이 초기 위치에서 경로를 따라 얼마나 멀리 떨어져 있는지를 지정합니다. 이 값은 0 에서 모델 내 항목 수까지 범위의 실수입니다.


path : Path

이 속성은 항목을 레이아웃하는 데 사용되는 경로를 보유합니다. 자세한 내용은 Path 문서를 참조하세요.


pathItemCount : int

이 속성은 한 번에 경로에 표시되는 항목의 수를 보유합니다.

pathItemCount를 정의되지 않음으로 설정하면 경로에 있는 모든 항목이 표시됩니다.


snapMode : enumeration

이 속성은 드래그 또는 플릭 후 항목이 정렬되는 방식을 결정합니다. 가능한 값은 다음과 같습니다:

상수설명
PathView.NoSnap(기본값): 항목이 경로를 따라 아무 곳에나 멈춥니다.
PathView.SnapToItem항목이 preferredHighlightBegin 에 정렬된 항목과 함께 정착합니다.
PathView.SnapOneItem프레스를 누를 때 가장 가까운 항목( preferredHighlightBegin )에서 한 항목 이상 떨어지지 않도록 항목이 정렬됩니다. 이 모드는 한 번에 한 페이지씩 이동할 때 특히 유용합니다.

snapModecurrentIndex 에 영향을 주지 않습니다. 보기가 이동될 때 currentIndex 을 업데이트하려면 highlightRangeModePathView.StrictlyEnforceRange 으로 설정합니다(기본값은 PathView).

highlightRangeMode참조하세요 .


첨부된 속성 문서

PathView.isCurrentItem : bool [read-only]

이 델리게이트가 현재 항목인 경우 이 첨부 속성은 참이고, 그렇지 않으면 거짓입니다.

델리게이트의 각 인스턴스에 첨부됩니다.

이 속성은 현재 항목의 모양을 조정하는 데 사용할 수 있습니다.

    Component {
        id: delegate
        Column {
            id: wrapper

            required property url icon
            required property string name

            opacity: PathView.isCurrentItem ? 1 : 0.5

            Image {
                anchors.horizontalCenter: nameText.horizontalCenter
                width: 64; height: 64
                source: wrapper.icon
            }
            Text {
                id: nameText
                text: wrapper.name
                font.pointSize: 16
            }
        }
    }

PathView.onPath : bool [read-only]

이 첨부 속성은 항목이 현재 경로에 있는지 여부를 보유합니다.

pathItemCount 가 설정된 경우 일부 항목이 인스턴스화되었지만 현재 경로에 있는 것으로 간주되지 않을 수 있습니다. 일반적으로 이러한 항목은 예를 들어 보이지 않게 설정됩니다:

Component {
    Rectangle {
        visible: PathView.onPath
        // ...
    }
}

델리게이트의 각 인스턴스에 첨부됩니다.


PathView.view : PathView [read-only]

이 연결된 속성은 이 델리게이트 인스턴스를 관리하는 보기를 보유합니다.

델리게이트의 각 인스턴스에 첨부됩니다.


신호 문서

dragEnded()

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

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

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


dragStarted()

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

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


flickEnded()

이 신호는 뷰가 플릭으로 인해 이동이 중지될 때 발생합니다.

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


flickStarted()

이 신호는 뷰를 플릭할 때 발생합니다. 플릭은 마우스 또는 터치가 움직이고 있는 동안 마우스 또는 터치를 놓는 지점부터 시작됩니다.

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


movementEnded()

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

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


movementStarted()

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

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


메서드 문서

decrementCurrentIndex()

현재 인덱스를 감소시킵니다.

참고: 메서드는 컴포넌트가 완료된 후에만 호출해야 합니다.


incrementCurrentIndex()

현재 인덱스를 증가시킵니다.

참고: 메서드는 컴포넌트가 완료된 후에만 호출해야 합니다.


int indexAt(real x, real y)

콘텐츠 좌표에서 x, y 지점이 포함된 항목의 인덱스를 반환합니다. 지정된 지점에 항목이 없으면 -1이 반환됩니다.

참고: 메서드는 컴포넌트가 완료된 후에만 호출해야 합니다.


Item itemAt(real x, real y)

콘텐츠 좌표에서 x, y 지점을 포함하는 항목을 반환합니다. 지정한 지점에 항목이 없으면 null이 반환됩니다.

참고: 메서드는 컴포넌트가 완료된 후에만 호출해야 합니다.


Item itemAtIndex(int index)

index 에 대한 항목을 반환합니다. 해당 인덱스에 대한 항목이 없는 경우(예: 아직 생성되지 않았거나 표시된 영역에서 패닝되어 캐시에서 제거됨) null이 반환됩니다.

참고: 이 메서드는 컴포넌트가 완료된 후에만 호출해야 합니다. 또한 뷰가 해당 항목을 해제하는 경우 컨트롤이 호출 범위를 벗어나는 즉시 null로 바뀔 수 있으므로 반환된 값은 저장해서는 안 됩니다.


positionViewAtIndex(int index, PositionMode mode)

indexmode 에 지정된 위치에 위치하도록 뷰를 배치합니다:

상수설명
PathView.Beginning경로의 시작 부분에 항목을 배치합니다.
PathView.Center경로의 중앙에 항목을 배치합니다.
PathView.End경로의 끝에 항목을 배치합니다.
PathView.Contain항목이 경로에 배치되었는지 확인합니다.
PathView.SnapPositionpreferredHighlightBegin 에 항목을 배치합니다. 이 모드는 highlightRangeMode 가 StrictlyEnforceRange이거나 snapMode 을 통해 스냅이 활성화된 경우에만 유효합니다.

참고: 메서드는 컴포넌트가 완료된 후에만 호출해야 합니다. 시작 시 뷰의 위치를 지정하려면 이 메서드를 Component.onCompleted에서 호출해야 합니다. 예를 들어 뷰를 끝에 배치하려면:

Component.onCompleted: positionViewAtIndex(count - 1, PathView.End)

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