Shape QML Type

경로를 렌더링합니다. 더 보기...

Import Statement: import QtQuick.Shapes 1.8
Inherits:

Item

Inherited By:

EllipseShape and MaskShape

속성

상세 설명

QPainterPath 에서 지오메트리를 삼각 측량하여 경로를 렌더링합니다.

이 접근 방식은 소프트웨어에서 경로가 래스터화되지 않기 때문에 QQuickPaintedItem 또는 2D 캔버스를 통해 셰이프를 렌더링하는 것과 다릅니다. 따라서 셰이프는 텍스처 업로드 또는 프레임 버퍼 블릿으로 인한 성능 저하를 피하면서 화면의 넓은 영역에 퍼지는 셰이프를 만드는 데 적합합니다. 또한 선언적 API를 사용하면 시작 및 종료 위치, 제어점 등과 같은 경로 요소 속성을 조작하고, 바인딩하고, 애니메이션을 적용할 수도 있습니다.

경로 요소를 지정하는 유형은 PathView 와 Shape 간에 공유됩니다. 그러나 모든 셰이프 구현이 모든 경로 요소 유형을 지원하는 것은 아니며, 일부는 PathView 에 적합하지 않을 수 있습니다. Shape의 현재 지원되는 하위 집합은 PathMove, PathLine, PathQuad, PathCubic, PathArc, PathTextPathSvg 입니다.

지원되는 경로 요소에 대한 자세한 개요는 Path 을 참조하세요.

Shape {
    width: 200
    height: 150
    anchors.centerIn: parent
    ShapePath {
        strokeWidth: 4
        strokeColor: "red"
        fillGradient: LinearGradient {
            x1: 20; y1: 20
            x2: 180; y2: 130
            GradientStop { position: 0; color: "blue" }
            GradientStop { position: 0.2; color: "green" }
            GradientStop { position: 0.4; color: "red" }
            GradientStop { position: 0.6; color: "yellow" }
            GradientStop { position: 1; color: "cyan" }
        }
        strokeStyle: ShapePath.DashLine
        dashPattern: [ 1, 4 ]
        startX: 20; startY: 20
        PathLine { x: 180; y: 130 }
        PathLine { x: 20; y: 130 }
        PathLine { x: 20; y: 20 }
    }
}

Item 와 마찬가지로 셰이프는 모든 시각적 또는 비시각적 객체를 자식으로 선언할 수 있습니다. ShapePath 객체는 특별히 처리됩니다. 이는 Rectangle 또는 Image 과 같은 시각적 항목과 Timer 과 같은 비시각적 객체를 Shape의 자식으로 직접 추가할 수 있으므로 유용합니다.

다음 목록에는 사용 가능한 셰이프 렌더링 접근 방식이 요약되어 있습니다:

  • Qt Quick 가 기본 하드웨어 가속 백엔드(RHI)로 실행되는 경우 일반 셰이프 렌더러가 사용됩니다. 이렇게 하면 도형이 삼각형으로 변환되어 렌더러에 전달됩니다.
  • software 백엔드가 완벽하게 지원됩니다. 이 경우 경로는 QPainter::strokePath() 및 QPainter::fillPath()을 통해 렌더링됩니다.
  • OpenVG 백엔드는 현재 지원되지 않습니다.

셰이프를 사용할 때는 성능에 영향을 미칠 수 있는 잠재적인 사항을 인지하는 것이 중요합니다:

  • 애플리케이션이 일반적인 삼각 측량 기반 셰이프 구현으로 실행되는 경우, 지오메트리 생성은 전적으로 CPU에서 이루어집니다. 이는 잠재적으로 비용이 많이 들 수 있습니다. 경로 요소 집합을 변경하거나 이러한 요소의 속성을 변경하거나 셰이프 자체의 특정 속성을 변경하면 변경할 때마다 영향을 받는 경로를 다시 삼각 측량해야 합니다. 따라서 이러한 속성에 애니메이션을 적용하면 성능이 낮은 시스템에서는 성능에 영향을 미칠 수 있습니다.
  • 그러나 셰이프 API의 데이터 중심적이고 선언적인 특성으로 인해 기본 CPU 및 GPU 리소스에 대한 캐시 성능이 향상되는 경우가 많습니다. ShapePath 의 프로퍼티를 변경하면 영향을 받는 ShapePath 만 재처리되고 셰이프의 다른 부분은 변경되지 않습니다. 따라서 프로퍼티를 자주 변경해도 필수 페인팅 접근 방식(예: QPainter)보다 전체 시스템 부하가 낮아질 수 있습니다.
  • 동시에 씬에 있는 셰이프 요소의 수에도 주의를 기울여야 합니다. 이러한 셰이프 항목이 씬 그래프에 표시되는 방식은 일반적인 지오메트리 기반 항목과 다르며 OpenGL 상태 변경과 관련하여 특정 비용이 발생합니다.
  • 일반적으로 씬에서는 꼭 필요한 경우가 아니라면 별도의 셰이프 항목을 사용하지 않는 것이 좋습니다. 여러 개의 셰이프 항목보다는 여러 개의 ShapePath 요소와 함께 하나의 셰이프 항목을 사용하는 것이 좋습니다.

Qt Quick 예제 - 도형, 일기 예보 예제, Path, PathMove, PathLine, PathQuad, PathCubic, PathArc, PathSvg참조하세요 .

속성 문서

horizontalAlignment : enumeration [since 6.7]

verticalAlignment : enumeration [since 6.7]

항목 내 도형의 가로 및 세로 정렬을 설정합니다. 기본적으로 도형은 왼쪽 상단의 (0,0) 에 맞춰 정렬됩니다.

horizontalAlignment 의 유효한 값은 Shape.AlignLeft, Shape.AlignRightShape.AlignHCenter 입니다. verticalAlignment 의 유효한 값은 Shape.AlignTop, Shape.AlignBottomShape.AlignVCenter 입니다.

이 QML 속성은 Qt 6.7에 도입되었습니다.


asynchronous : bool

rendererTypeShape.GeometryRenderer 또는 Shape.CurveRenderer 인 경우, 셰이프의 폴리싱 단계에서 입력 경로에 대한 일정량의 사전 처리가 CPU에서 수행됩니다. 이는 잠재적으로 비용이 많이 들 수 있습니다. 이 작업을 별도의 작업자 스레드로 오프로드하려면 이 속성을 true 로 설정합니다.

이 속성을 활성화하면 셰이프를 표시할 때 콘텐츠가 사용 가능해질 때까지 기다리지 않습니다. 대신 GUI/메인 스레드가 차단되지 않고 모든 비동기 작업이 완료된 경우에만 경로 렌더링 결과가 표시됩니다.

기본값은 false 입니다.


boundingRect : rect [read-only, since 6.6]

도형 내 모든 하위 경로의 결합된 경계 직사각형을 포함합니다.

이 프로퍼티는 Qt 6.6에 도입되었습니다.


containsMode : enumeration [since QtQuick.Shapes 1.11]

이 속성은 셰이프에 대한 contains()의 정의를 결정합니다. Qt Quick 입력 핸들러를 추가하고 마우스나 터치포인트가 셰이프 안에 완전히 들어왔을 때만 반응하도록 하려는 경우에 유용합니다.

Constant설명
Shape.BoundingRectContainsQQuickItem::contains()의 기본 구현은 주어진 점이 직사각형 바운딩 박스 안에 있는지 여부만 확인합니다. 이것이 가장 효율적인 구현이므로 기본값으로 사용됩니다.
Shape.FillContains이 셰이프를 구성하는 ShapePath 의 내부(채우기로 렌더링하는 경우 채워지는 부분)에 주어진 점이 포함되어 있는지 확인합니다. 셰이프 경로를 더 복잡하고 많이 추가할수록 검사 효율성이 떨어지며, 이로 인해 애플리케이션의 이벤트 전송 속도가 느려질 수 있습니다. 따라서 신중하게 사용해야 합니다.

FillContains 검사 속도를 높이는 한 가지 방법은 가능한 한 적은 수의 점으로 대략적인 윤곽을 생성하고 그 위에 투명한 모양을 배치한 다음 포인터 핸들러를 추가하여 이벤트 전달 중에 포함 검사를 더 저렴하게 하는 것입니다.

이 프로퍼티는 QtQuick.Shapes 1.11에 도입되었습니다.


data : list<Object> [default]

이 프로퍼티는 셰이프의 내용을 정의하는 ShapePath 객체를 보유합니다. Shape는 Item과 마찬가지로 시각적 또는 비시각적 객체를 자식으로 추가할 수 있으므로 다른 유형의 객체도 포함할 수 있습니다.


fillMode : enumeration [since QtQuick.Shapes 6.7]

이 속성을 설정하여 경로의 크기가 항목과 다를 때 발생하는 동작을 정의합니다.

ConstantDescription
Shape.NoResize항목의 크기와 관계없이 도형이 기본 크기로 렌더링됩니다. 기본값은
Shape.Stretch로 설정하면 도형이 항목에 맞게 크기가 조정되고 필요한 경우 종횡비가 변경됩니다. 커브 렌더러를 사용할 때 스케일링이 균일하지 않으면 앤티 앨리어싱 품질이 저하될 수 있습니다.
Shape.PreserveAspectFit항목 내부에 맞게 도형의 크기가 균일하게 조정됩니다.
Shape.PreserveAspectCrop도형의 크기가 균일하게 조정되어 항목을 완전히 채우고 필요한 경우 항목 외부로 확장됩니다. 클립이 참인 경우에만 실제로 콘텐츠를 자릅니다.

이 프로퍼티는 QtQuick.Shapes 6.7에 도입되었습니다.


preferredRendererType : enumeration [since 6.6]

도형 렌더링에 사용할 특정 백엔드를 요청합니다. 사용 가능한 값은 rendererType 와 동일합니다. 기본값은 Shape.UnknownRenderer 로, 특별한 기본 설정이 없음을 나타냅니다.

요청된 렌더러 유형이 현재 Qt Quick 백엔드에서 지원되지 않는 경우 해당 백엔드의 기본 렌더러가 대신 사용됩니다. 이는 백엔드가 초기화될 때 rendererType 에 반영됩니다.

Shape.SoftwareRenderer 현재 software 백엔드로 시나리오를 실행하지 않고는 선택할 수 없으며, 이 경우 preferredRendererType 에 관계없이 선택됩니다.

의미에 대한 자세한 내용은 rendererType 을 참조하세요.

이 프로퍼티는 Qt 6.6에 도입되었습니다.


rendererType : enumeration [read-only]

이 프로퍼티는 활성화된 경로 렌더링 백엔드를 결정합니다.

Constant설명
Shape.UnknownRenderer렌더러를 알 수 없습니다.
Shape.GeometryRendererGPU 렌더링을 위한 드라이버 독립적인 일반 솔루션입니다. QPainter 의 OpenGL 2 페인트 엔진과 동일한 CPU 기반 삼각 측량 방식을 사용합니다. RHI 기반 Qt Quick 시나리오 그래프 백엔드가 사용 중일 때 기본값입니다.
Shape.SoftwareRenderer래스터 페인트 엔진을 사용하는 순수 QPainter 드로잉. Qt Quick 시나리오 그래프가 software 백엔드로 실행되는 경우 기본 옵션이며 유일한 옵션입니다.
Shape.CurveRenderer모든 스케일에서 곡률을 보존하는 것을 목표로 하는 GPU 기반 렌더러. Shape.GeometryRenderer 과 달리 곡선은 짧은 직선으로 근사화되지 않습니다. 대신 커브는 특수한 조각 셰이더를 사용하여 렌더링됩니다. 따라서 시각적 품질이 향상되고 확대/축소 시 리테셀레이션 성능 저하를 방지할 수 있습니다. 또한 Shape.CurveRenderer 은 멀티샘플링 또는 슈퍼샘플링에 따른 성능 비용 없이 네이티브 고품질 안티앨리어싱을 제공합니다.

Qt Quick 시나리오 그래프가 software 백엔드와 함께 실행되지 않는 한 기본적으로 Shape.GeometryRenderer 가 선택됩니다. 이 경우 Shape.SoftwareRenderer 이 사용됩니다. Shape.CurveRendererpreferredRendererType 속성을 사용하여 요청할 수 있습니다.

참고: Shape.CurveRenderer 은 직육면체 곡선을 이차 곡선으로 근사화하므로 수학적으로 정확한 도형의 시각화와 약간 다를 수 있습니다. 또한 도형이 Qt Quick 3D 씬으로 렌더링되고 RHI용 OpenGL 백엔드가 활성화되어 있는 경우 OpenGL에 대한 GL_OES_standard_derivatives 확장이 필요합니다(OpenGL ES 3 이상에서는 기본적으로 사용 가능하지만 OpenGL ES 2에서는 선택 사항입니다).


status : enumeration [read-only]

이 프로퍼티는 셰이프의 상태를 결정하며 Shape.asynchronous가 true 로 설정된 경우와 관련이 있습니다.

Constant설명
Shape.Null아직 초기화되지 않았습니다.
Shape.Ready셰이프 처리가 완료되었습니다.
Shape.Processing경로가 처리 중입니다.

vendorExtensionsEnabled : bool

이 속성은 비표준 OpenGL 확장의 사용을 제어합니다.

기본값은 false 입니다.

Qt 6.0 현재 구현된 벤더별 렌더링 경로는 없습니다.


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