Shape QML Type
경로를 렌더링합니다. 더 보기...
| Import Statement: | import QtQuick.Shapes 1.12 |
| Inherits: | |
| Inherited By: |
속성
- asynchronous : bool
- boundingRect : rect
(since 6.6) - containsMode : enumeration
(since QtQuick.Shapes 1.11) - data : list<Object>
- fillMode : enumeration
(since QtQuick.Shapes 6.7) - horizontalAlignment : enumeration
(since 6.7) - preferredRendererType : enumeration
(since 6.6) - rendererType : enumeration
- status : enumeration
- vendorExtensionsEnabled : bool
- verticalAlignment : enumeration
(since 6.7)
상세 설명
QPainterPath 의 지오메트리를 삼각분할하여 경로를 렌더링합니다.
이 방식은 경로가 소프트웨어에서 래스터화되지 않기 때문에 QQuickPaintedItem 이나 2D 캔버스를 통해 도형을 렌더링하는 방식과는 다릅니다. 따라서 Shape는 화면의 넓은 영역에 걸쳐 도형을 생성하는 데 적합하며, 텍스처 업로드나 프레임버퍼 블릿으로 인한 성능 저하를 피할 수 있습니다. 또한, 선언적 API를 통해 시작 및 종료 위치, 제어점 등과 같은 경로 요소 속성을 조작하고, 바인딩하며, 심지어 애니메이션을 적용할 수도 있습니다.
경로 요소를 지정하는 데 사용되는 유형은 ` PathView `와 `Shape`에서 공통으로 사용됩니다. 그러나 모든 `Shape` 구현체가 모든 경로 요소 유형을 지원하는 것은 아니며, 일부 유형은 ` PathView`에서는 적합하지 않을 수 있습니다. 현재 `Shape`에서 지원하는 하위 집합은 다음과 같습니다: ` PathMove`, ` PathLine`, ` PathQuad`, ` PathCubic`, ` PathArc`, ` PathText ` 및 ` PathSvg`.
지원되는 경로 요소에 대한 자세한 개요는 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 와 마찬가지로, Shape도 시각적 또는 비시각적 객체를 자식으로 선언할 수 있습니다. ShapePath 객체는 특별히 처리됩니다. 이는 Rectangle 이나 Image 과 같은 시각적 항목과 Timer 과 같은 비시각적 객체를 Shape의 자식으로 직접 추가할 수 있게 해주므로 유용합니다.
다음 목록은 사용 가능한 Shape 렌더링 방식을 요약한 것입니다:
- Qt Quick 가 기본값인 하드웨어 가속 백엔드(RHI)로 실행될 때는 일반 Shape 렌더러가 사용됩니다. 이 렌더러는 Shape를 삼각형으로 변환하여 렌더러로 전달합니다.
software백엔드는 완벽하게 지원됩니다. 이 경우 경로는 ` QPainter::strokePath()` 및 ` QPainter::fillPath()`를 통해 렌더링됩니다.- OpenVG 백엔드는 현재 지원되지 않습니다.
Shape를 사용할 때는 잠재적인 성능 영향에 유의해야 합니다:
- 애플리케이션이 삼각분할 기반의 일반적인 Shape 구현 방식으로 실행될 때, 지오메트리 생성은 전적으로 CPU에서 이루어집니다. 이는 잠재적으로 많은 자원을 소모할 수 있습니다. 경로 요소 집합을 변경하거나, 이러한 요소의 속성을 변경하거나, Shape 자체의 특정 속성을 변경할 경우, 변경될 때마다 해당 경로에 대한 재삼각분할이 수행됩니다. 따라서 이러한 속성에 애니메이션을 적용하면 성능이 낮은 시스템에서 성능에 영향을 미칠 수 있습니다.
- 그러나 Shape API의 데이터 주도적이고 선언적인 특성은 종종 기본 CPU 및 GPU 리소스에 대한 더 나은 캐시 효율성을 의미합니다. 하나의 ` ShapePath `에서 속성이 변경되면 영향을 받는 ` ShapePath`만 재처리되며, Shape의 다른 부분은 변경되지 않습니다. 따라서 빈번하게 변경되는 속성이라도 명령형 페인팅 방식(예: QPainter)을 사용할 때보다 전체적인 시스템 부하가 더 낮을 수 있습니다.
- 동시에, 씬 내 Shape 요소의 수에도 주의를 기울여야 합니다. 이러한 Shape 항목이 씬 그래프에서 표현되는 방식은 일반적인 지오메트리 기반 항목과 다르며, OpenGL 상태 변경 시 일정한 오버헤드가 발생합니다.
- 일반적인 규칙으로, 절대적으로 필요하지 않은 경우 장면에서 별도의 Shape 항목을 사용하는 것을 피해야 합니다. 여러 Shape 항목보다는 하나의 Shape 항목에 여러 ShapePath 요소를 포함하는 방식을 선호하십시오.
관련 자료: Qt Quick 예제 - Shapes, 일기 예보 예제, Path, PathMove, PathLine, PathQuad, PathCubic, PathArc 및 PathSvg.
속성 문서
asynchronous : bool
rendererType 가 Shape.GeometryRenderer 또는 Shape.CurveRenderer 로 설정된 경우, Shape의 폴리싱 단계에서 입력 경로에 대한 일정량의 전처리가 CPU에서 수행됩니다. 이 작업은 잠재적으로 많은 자원을 소모할 수 있습니다. 이 작업을 별도의 워커 스레드로 오프로드하려면 이 속성을 true 로 설정하십시오.
이 기능이 활성화되면, Shape를 표시할 때 콘텐츠가 준비될 때까지 기다리지 않습니다. 대신, GUI/메인 스레드가 차단되지 않으며, 모든 비동기 작업이 완료된 후에만 경로 렌더링 결과가 표시됩니다.
기본값은 ` false`입니다.
boundingRect : rect [read-only, since 6.6]
셰이프 내의 모든 하위 경로의 통합된 경계 사각형을 포함합니다.
이 속성은 Qt 6.6에서 도입되었습니다.
containsMode : enumeration [since QtQuick.Shapes 1.11]
이 속성은 Shape에 대한 ` contains()`의 정의를 결정합니다. ` Qt Quick ` 입력 핸들러를 추가하고, 마우스나 터치 포인트가 Shape 내부에 완전히 들어왔을 때만 반응하도록 하고 싶은 경우에 유용합니다.
| 상수 | 설명 |
|---|---|
Shape.BoundingRectContains | QQuickItem::contains()의 기본 구현은 주어진 점이 직사각형 경계 상자 내에 있는지 여부만 확인합니다. 이는 가장 효율적인 구현 방식이므로 기본값으로 설정되어 있습니다. |
Shape.FillContains | 이 Shape를 구성하는 ShapePath 중 어느 것의 내부(채우기(fill)로 렌더링할 경우 채워지는 부분)에 주어진 점이 포함되어 있는지 확인합니다. 추가하는 ShapePath가 복잡하고 많을수록 이 확인 작업의 효율성은 떨어지며, 이로 인해 애플리케이션의 이벤트 전달 속도가 느려질 수 있습니다. 따라서 신중하게 사용해야 합니다. |
FillContains 검사를 가속화하는 한 가지 방법은 가능한 한 적은 수의 점으로 대략적인 윤곽선을 생성하고, 이를 위에 투명한 Shape에 배치한 다음, 해당 Shape에 Pointer Handler를 추가하여 이벤트 전달 중 포함 여부 검사 비용을 줄이는 것입니다.
이 속성은 QtQuick.Shapes 1.11에서 도입되었습니다.
data : list<Object> [default]
이 속성은 Shape의 내용을 정의하는 ` ShapePath ` 객체들을 포함합니다. 또한 Shape는 Item과 마찬가지로 시각적 또는 비시각적 객체를 자식으로 추가할 수 있으므로, 이 속성에는 다른 유형의 객체도 포함될 수 있습니다.
fillMode : enumeration [since QtQuick.Shapes 6.7]
이 속성을 설정하여 경로의 크기가 항목의 크기와 다를 때 어떻게 처리할지 정의합니다.
| 상수 | 설명 |
|---|---|
Shape.NoResize | 도형은 항목의 크기와 관계없이 본래 크기로 렌더링됩니다. 이것이 기본값이며 |
Shape.Stretch | 도형이 항목에 맞도록 크기가 조정되며, 필요한 경우 종횡비가 변경됩니다. 곡선 렌더러를 사용할 때 비균일한 크기 조정은 앤티앨리어싱 품질 저하를 초래할 수 있습니다. |
Shape.PreserveAspectFit | 도형은 항목 내부에 맞도록 균일하게 크기가 조정됩니다. |
Shape.PreserveAspectCrop | 도형은 항목을 완전히 채우도록 균일하게 크기가 조정되며, 필요한 경우 항목 밖으로 확장됩니다. 이 설정은 ` clip `가 true일 때만 실제로 콘텐츠를 잘라낸다는 점에 유의하십시오 |
이 속성은 QtQuick.Shapes 6.7에서 도입되었습니다.
항목 내 도형의 수평 및 수직 정렬을 설정합니다. 기본적으로 도형은 왼쪽 상단 모서리를 기준으로 ‘ (0,0) ’에 맞춰 정렬됩니다.
horizontalAlignment 의 유효한 값은 Shape.AlignLeft, Shape.AlignRight, Shape.AlignHCenter 입니다. verticalAlignment 의 유효한 값은 Shape.AlignTop, Shape.AlignBottom, Shape.AlignVCenter 입니다.
이 속성들은 Qt 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]
이 속성은 어떤 경로 렌더링 백엔드가 활성화되어 있는지 결정합니다.
| 상수 | 설명 |
|---|---|
Shape.UnknownRenderer | 렌더러가 알려지지 않았습니다. |
Shape.GeometryRenderer | GPU 렌더링을 위한 범용적이고 드라이버에 독립적인 솔루션입니다. QPainter 의 OpenGL 2 페인트 엔진과 동일한 CPU 기반 삼각분할 방식을 사용합니다. RHI 기반 Qt Quick 시네그래프 백엔드가 사용 중일 때의 기본값입니다. |
Shape.SoftwareRenderer | 래스터 페인트 엔진을 사용하는 순수한 QPainter 드로잉입니다. 이는 Qt Quick 시나그래프가 software 백엔드와 함께 실행될 때의 기본이자 유일한 옵션입니다. |
Shape.CurveRenderer | 어떤 스케일에서도 곡률을 보존하는 것을 목표로 하는 GPU 기반 렌더러입니다. Shape.GeometryRenderer 와 달리, 곡선을 짧은 직선으로 근사화하지 않습니다. 대신, 특수한 프래그먼트 셰이더를 사용하여 곡선을 렌더링합니다. 이를 통해 시각적 품질이 향상되고, 확대/축소 시 테셀레이션 재계산으로 인한 성능 저하를 방지할 수 있습니다. 또한, Shape.CurveRenderer 는 멀티샘플링이나 슈퍼샘플링으로 인한 성능 저하 없이 네이티브 방식의 고품질 앤티앨리어싱을 제공합니다. |
preferredRendererType 기본적으로 Qt Quick 시네그래프가 software 백엔드로 실행되는 경우가 아니라면 Shape.GeometryRenderer 가 선택됩니다. 해당 경우에는 Shape.SoftwareRenderer 가 사용됩니다. 속성을 사용하여 Shape.CurveRenderer 를 요청할 수 있습니다.
참고: Shape.CurveRenderer 는 3차 곡선을 2차 곡선으로 근사화하므로, 도형의 수학적으로 정확한 시각화와는 약간 차이가 있을 수 있습니다. 또한, 도형이 Qt Quick 3D 장면으로 렌더링되고 RHI용 OpenGL 백엔드가 활성화된 경우, OpenGL의 GL_OES_standard_derivatives 확장이 필요합니다(이는 OpenGL ES 3 이상에서는 기본적으로 제공되지만, OpenGL ES 2에서는 선택 사항입니다).
status : enumeration [read-only]
이 속성은 Shape의 상태를 결정하며, Shape.asynchronous가 ‘ true ’로 설정된 경우에 적용됩니다.
| 상수 | 설명 |
|---|---|
Shape.Null | 아직 초기화되지 않았습니다. |
Shape.Ready | Shape의 처리가 완료되었습니다. |
Shape.Processing | 경로가 처리 중입니다. |
vendorExtensionsEnabled : bool
이 속성은 비표준 OpenGL 확장 기능의 사용 여부를 제어합니다.
기본값은 ` false`입니다.
Qt 6.0 기준, 벤더별 렌더링 경로는 구현되어 있지 않습니다.
© 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.