QCanvasPainter Class
QCanvasPainter 클래스는 QRhi 에서 하드웨어 가속 페인팅을 수행합니다. 더 보기...
| 헤더: | #include <QCanvasPainter> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS CanvasPainter)target_link_libraries(mytarget PRIVATE Qt6::CanvasPainter) |
| 이후 | Qt 6.11 |
| 상태: | 기술 미리보기 |
공용 형
| enum class | CompositeOperation { SourceOver, SourceAtop, DestinationOut } |
| enum class | ImageFlag { GenerateMipmaps, RepeatX, RepeatY, Repeat, FlipY, …, NativeTexture } |
| flags | ImageFlags |
| enum class | LineCap { Butt, Round, Square } |
| enum class | LineJoin { Round, Bevel, Miter } |
| enum class | PathConnection { NotConnected, Connected } |
| enum class | PathWinding { CounterClockWise, ClockWise } |
| enum class | RenderHint { Antialiasing, HighQualityStroking, DisableWindingEnforce } |
| flags | RenderHints |
| enum class | TextAlign { Left, Right, Center, Start, End } |
| enum class | TextBaseline { Top, Hanging, Middle, Alphabetic, Bottom } |
| enum class | TextDirection { LeftToRight, RightToLeft, Inherit, Auto } |
| enum class | WrapMode { NoWrap, Wrap, WordWrap, WrapAnywhere } |
공용 함수
| QCanvasPainter() | |
| ~QCanvasPainter() | |
| qsizetype | activeImageCount() const |
| qsizetype | activeImageMemoryUsage() const |
| QCanvasImage | addImage(const QImage &image, QCanvasPainter::ImageFlags flags = {}) |
| QCanvasImage | addImage(QRhiTexture *texture, QCanvasPainter::ImageFlags flags = {}) |
| QCanvasImage | addImage(const QCanvasOffscreenCanvas &canvas, QCanvasPainter::ImageFlags flags = {}) |
| void | addPath(const QPainterPath &path) |
| void | addPath(const QCanvasPath &path, const QTransform &transform = QTransform()) |
| void | addPath(const QCanvasPath &path, qsizetype start, qsizetype count, const QTransform &transform = QTransform()) |
| void | arc(float centerX, float centerY, float radius, float a0, float a1, QCanvasPainter::PathWinding direction = PathWinding::ClockWise, QCanvasPainter::PathConnection connection = PathConnection::Connected) |
| void | arc(QPointF centerPoint, float radius, float a0, float a1, QCanvasPainter::PathWinding direction = PathWinding::ClockWise, QCanvasPainter::PathConnection connection = PathConnection::Connected) |
| void | arcTo(float x1, float y1, float x2, float y2, float radius) |
| void | arcTo(QPointF controlPoint1, QPointF controlPoint2, float radius) |
| void | beginHoleSubPath() |
| void | beginPath() |
| void | beginSolidSubPath() |
| void | bezierCurveTo(float cp1X, float cp1Y, float cp2X, float cp2Y, float x, float y) |
| void | bezierCurveTo(QPointF controlPoint1, QPointF controlPoint2, QPointF endPoint) |
| void | circle(float centerX, float centerY, float radius) |
| void | circle(QPointF centerPoint, float radius) |
| void | cleanupResources() |
| void | clearRect(float x, float y, float width, float height) |
| void | clearRect(const QRectF &rect) |
| void | closePath() |
| QCanvasOffscreenCanvas | createCanvas(QSize pixelSize, int sampleCount = 1, QCanvasOffscreenCanvas::Flags flags = {}) |
| void | destroyCanvas(QCanvasOffscreenCanvas &canvas) |
| float | devicePixelRatio() const |
| void | drawBoxShadow(const QCanvasBoxShadow &shadow) |
| void | drawImage(const QCanvasImage &image, float x, float y) |
| void | drawImage(const QCanvasImage &image, const QRectF &destinationRect) |
| void | drawImage(const QCanvasImage &image, const QRectF &sourceRect, const QRectF &destinationRect) |
| void | drawImage(const QCanvasImage &image, float x, float y, float width, float height) |
| void | ellipse(float centerX, float centerY, float radiusX, float radiusY) |
| void | ellipse(const QRectF &rect) |
| void | ellipse(QPointF centerPoint, float radiusX, float radiusY) |
| void | fill() |
| void | fill(const QCanvasPath &path, int pathGroup = 0) |
| void | fillRect(float x, float y, float width, float height) |
| void | fillRect(const QRectF &rect) |
| void | fillText(const QString &text, float x, float y, float maxWidth = -1) |
| void | fillText(const QString &text, const QRectF &rect) |
| void | fillText(const QString &text, QPointF point, float maxWidth = -1) |
| QTransform | getTransform() const |
| void | lineTo(float x, float y) |
| void | lineTo(QPointF point) |
| void | moveTo(float x, float y) |
| void | moveTo(QPointF point) |
| void | quadraticCurveTo(float cpX, float cpY, float x, float y) |
| void | quadraticCurveTo(QPointF controlPoint, QPointF endPoint) |
| void | rect(float x, float y, float width, float height) |
| void | rect(const QRectF &rect) |
| void | removeImage(const QCanvasImage &image) |
| void | removePathGroup(int pathGroup) |
| QCanvasPainter::RenderHints | renderHints() const |
| void | reset() |
| void | resetClipping() |
| void | resetTransform() |
| void | restore() |
| void | rotate(float angle) |
| void | roundRect(float x, float y, float width, float height, float radius) |
| void | roundRect(const QRectF &rect, float radius) |
| void | roundRect(const QRectF &rect, float radiusTopLeft, float radiusTopRight, float radiusBottomRight, float radiusBottomLeft) |
| void | roundRect(float x, float y, float width, float height, float radiusTopLeft, float radiusTopRight, float radiusBottomRight, float radiusBottomLeft) |
| void | save() |
| void | scale(float scale) |
| void | scale(float scaleX, float scaleY) |
| void | setAntialias(float antialias) |
| void | setBrushTransform(const QTransform &transform) |
| void | setClipRect(float x, float y, float width, float height) |
| void | setClipRect(const QRectF &rect) |
| void | setFillStyle(const QColor &color) |
| void | setFillStyle(const QCanvasBrush &brush) |
| void | setFont(const QFont &font) |
| void | setGlobalAlpha(float alpha) |
| void | setGlobalBrightness(float value) |
| void | setGlobalCompositeOperation(QCanvasPainter::CompositeOperation operation) |
| void | setGlobalContrast(float value) |
| void | setGlobalSaturate(float value) |
| void | setLineCap(QCanvasPainter::LineCap cap) |
| void | setLineJoin(QCanvasPainter::LineJoin join) |
| void | setLineWidth(float width) |
| void | setMiterLimit(float limit) |
| void | setPathWinding(QCanvasPainter::PathWinding winding) |
| void | setRenderHint(QCanvasPainter::RenderHint hint, bool on = true) |
| void | setRenderHints(QCanvasPainter::RenderHints hints, bool on = true) |
| void | setStrokeStyle(const QColor &color) |
| void | setStrokeStyle(const QCanvasBrush &brush) |
| void | setTextAlign(QCanvasPainter::TextAlign align) |
| void | setTextAntialias(float antialias) |
| void | setTextBaseline(QCanvasPainter::TextBaseline baseline) |
| void | setTextDirection(QCanvasPainter::TextDirection direction) |
| void | setTextLineHeight(float height) |
| void | setTextWrapMode(QCanvasPainter::WrapMode wrapMode) |
| void | setTransform(const QTransform &transform) |
| void | skew(float angleX, float angleY = 0.0f) |
| void | stroke() |
| void | stroke(const QCanvasPath &path, int pathGroup = 0) |
| void | strokeRect(float x, float y, float width, float height) |
| void | strokeRect(const QRectF &rect) |
| QRectF | textBoundingBox(const QString &text, float x, float y, float maxWidth = -1) |
| QRectF | textBoundingBox(const QString &text, const QRectF &rect) |
| QRectF | textBoundingBox(const QString &text, QPointF point, float maxWidth = -1) |
| void | transform(const QTransform &transform) |
| void | translate(float x, float y) |
| void | translate(QPointF point) |
정적 공용 멤버
상세 설명
Qt 캔버스 페인터(QCanvasPainter)는 하드웨어 가속(GPU) 페인팅에 최적화된 페인팅 API를 제공합니다. 이 API는 HTML 캔버스 2D 컨텍스트 사양을 충실히 따르며, Qt C++로 포팅되었습니다. 또한 QPainter 의 영향을 받았지만 더 간결한 API를 제공합니다.
다음은 QCanvasPainter를 사용하여 둥근 버튼을 만드는 간단한 예제입니다.
![]() | QRectF rect(40, 70, 120, 60); QRectF shadowRect = rect.translated(2, 4); // Paint shadow QCanvasBoxShadow shadow(shadowRect, 30, 15, "#60373F26"); p->drawBoxShadow(shadow); // Paint rounded rect p->beginPath(); p->roundRect(rect, 30); p->setFillStyle("#DBEB00"); p->fill(); // Paint text p->setTextAlign(QCanvasPainter::TextAlign::Center); p->setTextBaseline(QCanvasPainter::TextBaseline::Middle); QFont font("Titillium Web", 18); p->setFont(font); p->setFillStyle("#373F26"); p->fillText("CLICK!", rect); |
다음은 간단한 그래프를 그리는 또 다른 예시입니다.
![]() | // Paint grid QCanvasGridPattern grid(0, 0, 10, 10, "#404040", "#202020"); p->setFillStyle(grid); p->fillRect(0, 0, width(), height()); // Paint axis p->setFillStyle(QColorConstants::White); p->fillRect(0, 0.5 * height() - 1, width(), 2); p->fillRect(0.5 * width() - 1, 0, 2, height()); // Paint shadowed graph p->beginPath(); p->moveTo(20, height() * 0.8); p->bezierCurveTo(width() * 0.2, height() * 0.4, width() * 0.5, height() * 0.8, width() - 20, height() * 0.2); p->setAntialias(10); p->setLineWidth(12); p->setStrokeStyle("#D0000000"); p->stroke(); p->setAntialias(1); p->setLineWidth(6); QCanvasLinearGradient lg(0, 0, 0, height()); lg.setStartColor(QColorConstants::Red); lg.setEndColor(QColorConstants::Green); p->setStrokeStyle(lg); p->stroke(); |
특징
대부분의 부분과 이름 지정 관점에서 QCanvasPainter는 HTML 캔버스 2D 컨텍스트(https://html.spec.whatwg.org/multipage/canvas.html#2dcontext)를 충실히 따릅니다. 따라서 많은 개발자가 친숙하게 사용할 수 있고 기존 캔버스 코드를 쉽게 재사용할 수 있습니다. 하지만 HTML 캔버스와 100% 호환되는 것이 목표는 아닙니다. QCanvasPainter에는 QRhi 하드웨어 가속 그래픽 API에서 더 간단하고 성능을 높이고 최신 UI 요구 사항을 더 잘 충족하기 위한 일부 기능이 누락되어 있습니다. 이러한 이유로 인해 QCanvasPainter에는 HTML 캔버스 2D 컨텍스트에 비해 추가 기능도 있습니다.
다음은 HTML 캔버스에 비해 현재 누락된 기능 중 일부입니다:
- 클리핑: 모든 클리핑은 (변형된) 직사각형이며 경로 모양으로의 클리핑은 지원되지 않습니다.
- 채우기 모드: 기본 0이 아닌 채우기 규칙만 지원되며 짝수-홀수 채우기 규칙은 지원되지 않습니다.
- 대시: 획은 항상 실선이며, 점선/점선 획 패턴은 지원되지 않습니다.
- 경로 테스트: isPointInPath() 또는 isPointInStroke() 메서드가 없습니다.
- 텍스트 획: 텍스트의 윤곽선 획은 지원되지 않습니다.
- 필터: 캔버스 SVG 필터 효과는 지원되지 않습니다.
- 합성 모드: 합성 모드는 3개로 제한되며, 추가 버퍼에 렌더링하지 않고도 지원할 수 있습니다.
- 그림자: 내장된 그림자 메서드는 지원되지 않습니다.
반면 QCanvasPainter가 HTML 캔버스에 비해 제공하는 몇 가지 추가 기능은 다음과 같습니다:
- 경로 그룹: QCanvasPainter를 사용하면 정적 경로에 페인팅하고 이러한 경로를 그룹으로 캐싱하여 최적의 GPU 사용을 할 수 있습니다.
- 조정 가능한 앤티앨리어싱: 경로 버텍스 앤티앨리어싱 및 SDF 텍스트 렌더링으로 인해 앤티앨리어싱의 픽셀 양을 자유롭게 조정하여 더 부드러운 페인팅을 할 수 있습니다.
- 박스 그라데이션: 선형, 방사형 및 원뿔형 그라디언트 외에도 QCanvasPainter는 둥근 직사각형 상자 그라디언트도 지원합니다.
- 상자 그림자: QCanvasPainter는 CSS 상자 그림자 유형의 브러시도 지원합니다. 렌더링은 Qt Quick RectangularShadow 과 유사한 SDF 접근 방식을 사용하여 성능이 매우 뛰어납니다.
- 그리드 패턴: QCanvasPainter는 동적 그리드 및 막대 패턴 스타일에 대해 QCanvasGridPattern 을 지원합니다.
- 사용자 지정 브러시: 또한 사용자 지정 버텍스 및 프래그먼트 셰이더(QCanvasCustomBrush)로 채우기 및 스트로크를 할 수 있습니다. 이러한 사용자 지정 브러시는 텍스트에도 사용할 수 있습니다.
- 텍스트 줄 바꿈: QCanvasPainter는 다양한 줄 바꿈 모드를 사용하여 텍스트를 여러 줄로 자동 줄 바꿈하는 기능을 지원합니다.
- 색상 효과: QCanvasPainter는 글로벌알파 외에도 글로벌 밝기, 대비 및 채도도 지원합니다.
- 색조 이미지: QCanvasPainter는 페인트된 이미지와 이미지 패턴에 틴트 컬러 지원을 추가합니다.
QCanvasPainter는 아키텍처에 구애받지 않으며 Qt Quick 및 Qt Widgets 애플리케이션 모두에서 사용할 수 있습니다. 사실, 이 두 가지가 없어도 QWindow 와 QRhi 만 있으면 사용할 수 있습니다. QCanvasPainter를 활용하려면 애플리케이션의 아키텍처에 따라 다음 클래스 중 하나에서 사용하세요:
- Qt Quick: QCanvasPainterItem 과 QCanvasPainterItemRenderer 을 사용하세요.
- Qt Widgets: QCanvasPainterWidget .
- QRhi기반 QWindow 또는 오프스크린 QRhi 버퍼를 사용합니다: QCanvasPainterFactory 및 QCanvasRhiPaintDriver 을 사용합니다.
감기 규칙
QCanvasPainter는 nonzero (WindingFill) 채우기 규칙을 사용합니다. 경로 포인트 방향에 따라 채우기를 선택하려면 setRenderHint()로 DisableWindingEnforce 렌더링 힌트를 설정하여 와인딩 강제 적용을 비활성화합니다.
![]() | p->setRenderHint(QCanvasPainter::RenderHint::DisableWindingEnforce); p->beginPath(); // Outer shape, counterclockwise p->moveTo(20, 20); p->lineTo(100, 180); p->lineTo(180, 20); p->closePath(); // Inner shape, clockwise p->moveTo(100, 40); p->lineTo(125, 90); p->lineTo(75, 90); p->closePath(); p->fill(); p->stroke(); |
그러나 더 일반적인 경우는 setPathWinding() 또는 beginHoleSubPath() 및 beginSolidSubPath() 헬퍼를 사용하여 와인딩 강제 적용 및 기본 와인딩 설정에 의존하는 것입니다.
![]() | p->beginPath(); p->roundRect(20, 20, 160, 160, 30); // Start painting holes p->beginHoleSubPath(); p->roundRect(40, 40, 120, 120, 10); // Start painting solid p->beginSolidSubPath(); p->rect(60, 60, 80, 20); p->circle(100, 120, 20); p->fill(); p->stroke(); |
멤버 유형 문서
enum class QCanvasPainter::CompositeOperation
Qt 캔버스 페인터는 3가지 합성 연산을 지원합니다:
| 상수 | Value | 설명 |
|---|---|---|
QCanvasPainter::CompositeOperation::SourceOver | 0 | 기본값입니다. 기존 콘텐츠 위에 새 도형을 그립니다. |
QCanvasPainter::CompositeOperation::SourceAtop | 1 | 새 도형은 기존 콘텐츠와 겹치는 부분에만 그려집니다. |
QCanvasPainter::CompositeOperation::DestinationOut | 2 | 기존 콘텐츠는 새 도형과 겹치지 않는 곳에 유지됩니다. |
setGlobalCompositeOperation()도 참조하세요 .
열거형 클래스 QCanvasPainter::ImageFlag
플래그 QCanvasPainter::ImageFlags
이 열거형은 이미지와 관련된 플래그를 지정합니다. addImage ()와 함께 사용하여 플래그를 설정합니다.
| 상수 | 값 | 설명 |
|---|---|---|
QCanvasPainter::ImageFlag::GenerateMipmaps | 1 << 0 | 이미지에 대한 밉맵을 생성하려면 이 값을 설정합니다. 밉맵은 원본 크기보다 작게 축소된 이미지에 대해 더 부드러운 출력을 원할 때 사용해야 합니다. |
QCanvasPainter::ImageFlag::RepeatX | 1 << 1 | 이미지 패턴과 함께 사용하면 이미지를 X좌표로 반복합니다. |
QCanvasPainter::ImageFlag::RepeatY | 1 << 2 | 이미지 패턴과 함께 사용하면 이미지를 Y 좌표로 반복합니다. |
QCanvasPainter::ImageFlag::Repeat | RepeatX | RepeatY | 이미지 패턴과 함께 사용하면 두 좌표에서 이미지를 반복합니다. |
QCanvasPainter::ImageFlag::FlipY | 1 << 3 | 렌더링할 때 이미지를 Y 방향으로 반전(반전)합니다. |
QCanvasPainter::ImageFlag::Premultiplied | 1 << 4 | 이미지 데이터에 알파가 미리 곱해져 있습니다. |
QCanvasPainter::ImageFlag::Nearest | 1 << 5 | 이미지 보간이 선형 대신 근사 보간입니다. |
QCanvasPainter::ImageFlag::NativeTexture | 1 << 6 | QCanvasPainter를 벗어난 텍스처임을 나타냅니다. |
이미지 플래그 유형은 QFlags<이미지 플래그>에 대한 타입 정의입니다. 이미지플래그 값의 OR 조합을 저장합니다.
enum class QCanvasPainter::LineCap
LineCap은 선의 끝(캡)을 그리는 방법을 정의하는 데 사용됩니다.
| 상수 | 값 | 설명 |
|---|---|---|
QCanvasPainter::LineCap::Butt | 0 | (기본값) 선의 끝점을 덮지 않는 정사각형 선 끝점입니다. |
QCanvasPainter::LineCap::Round | 1 | 둥근 선 끝. |
QCanvasPainter::LineCap::Square | 2 | 끝점을 덮고 끝점을 넘어 선 너비의 절반만큼 연장되는 정사각형 선 끝점입니다. |
setLineCap()도 참조하세요 .
enum class QCanvasPainter::LineJoin
LineJoin은 연결된 두 선 사이의 조인 방법을 정의하는 데 사용됩니다.
| Constant | 값 | 설명 |
|---|---|---|
QCanvasPainter::LineJoin::Round | 0 | 두 선 사이의 원형 호가 채워집니다. |
QCanvasPainter::LineJoin::Bevel | 1 | 두 선 사이의 삼각형 노치가 채워집니다. |
QCanvasPainter::LineJoin::Miter | 2 | (기본값) 선의 바깥쪽 가장자리가 비스듬히 만나도록 확장되고 이 영역이 채워집니다. |
setLineJoin() 및 setMiterLimit()도 참조하세요 .
enum class QCanvasPainter::PathConnection
일부 그리기 메서드에서는 새 경로를 이전 경로의 마지막 지점에 연결할지 여부를 지정하는 데 PathConnection이 사용됩니다.
| 상수 | 값 | 설명 |
|---|---|---|
QCanvasPainter::PathConnection::NotConnected | 0 | 이전 경로의 마지막 지점에서 현재 경로의 첫 번째 지점까지 선이 그려지지 않습니다. |
QCanvasPainter::PathConnection::Connected | 1 | 이전 경로의 마지막 지점이 현재 경로의 첫 번째 지점에 연결됩니다. |
arc()도 참조하세요 .
enum class QCanvasPainter::PathWinding
경로 감기는 경로 그리기 방향을 지정하는 데 사용됩니다. 이 방향은 경로에서 하위 경로가 솔리드인지 또는 구멍인지 결정하는 데 사용됩니다.
| 상수 | 값 | 설명 |
|---|---|---|
QCanvasPainter::PathWinding::CounterClockWise | 0 | (기본값) 솔리드 도형의 경우 시계 반대 방향으로 감습니다. |
QCanvasPainter::PathWinding::ClockWise | 1 | 구멍의 경우 시계 방향으로 감습니다. |
setPathWinding()도 참조하십시오 .
enum 클래스 QCanvasPainter::RenderHint
플래그 QCanvasPainter::RenderHints
이 열거형은 렌더링과 관련된 QCanvasPainter 에 플래그를 지정합니다. setRenderHint ()를 사용하여 플래그를 설정합니다.
| 상수 | 값 | 설명 |
|---|---|---|
QCanvasPainter::RenderHint::Antialiasing | 1 << 0 | 이 값을 false로 설정하면 앤티앨리어싱이 비활성화됩니다. 활성화하면 렌더링 비용이 높아집니다. 기본값은 true입니다. |
QCanvasPainter::RenderHint::HighQualityStroking | 1 << 1 | 이 값을 true로 설정하면 스트로킹이 겹치거나 불투명도가 완전하지 않은 일부 덜 일반적인 경우에 더 정확한 렌더링이 가능합니다. 이 옵션을 활성화하면 렌더링 비용이 높아집니다. 기본값은 false입니다. |
QCanvasPainter::RenderHint::DisableWindingEnforce | 1 << 2 | 이 값을 true로 설정하면 setPathWinding()에 설정된 것과 일치하도록 경로 감기가 적용되지 않습니다. 비활성화하면 예를 들어 시계 방향 순서대로 점을 추가하여 경로에 구멍을 만들 수 있습니다. 비활성화하면 성능이 향상될 수도 있습니다. |
RenderHints 유형은 QFlags<RenderHint>에 대한 typedef입니다. RenderHint 값의 OR 조합을 저장합니다.
enum class QCanvasPainter::TextAlign
TextAlign은 텍스트가 가로로 정렬되는 방식을 정의하는 데 사용됩니다.
| 상수 | 값 | 설명 |
|---|---|---|
QCanvasPainter::TextAlign::Left | 0 | 텍스트의 왼쪽을 지정된 위치에 가로로 정렬합니다. |
QCanvasPainter::TextAlign::Right | 1 | 텍스트의 오른쪽을 지정된 위치에 가로로 정렬합니다. |
QCanvasPainter::TextAlign::Center | 2 | 텍스트의 중앙을 지정된 위치에 가로로 정렬합니다. |
QCanvasPainter::TextAlign::Start | 3 | (기본값) 텍스트가 줄의 정상 시작 부분에 정렬됩니다(왼쪽에서 오른쪽 로캘의 경우 왼쪽 정렬, 오른쪽에서 왼쪽 로캘의 경우 오른쪽 정렬). |
QCanvasPainter::TextAlign::End | 4 | 텍스트가 줄의 일반 끝 부분에 정렬됩니다(왼쪽에서 오른쪽 로캘의 경우 오른쪽 정렬, 오른쪽에서 왼쪽 로캘의 경우 왼쪽 정렬). |
setTextAlign(), setTextDirection() 및 fillText()도 참조하세요 .
enum class QCanvasPainter::TextBaseline
TextBaseline은 텍스트가 세로로 정렬(기준선)되는 방식을 정의하는 데 사용됩니다.
| 상수 | 값 | 설명 |
|---|---|---|
QCanvasPainter::TextBaseline::Top | 0 | 텍스트 상단을 지정된 위치에 세로로 정렬합니다. |
QCanvasPainter::TextBaseline::Hanging | 1 | 텍스트의 매달린 기준선을 지정된 위치에 세로로 정렬합니다. |
QCanvasPainter::TextBaseline::Middle | 2 | 텍스트의 가운데를 지정된 위치에 세로로 정렬합니다. |
QCanvasPainter::TextBaseline::Alphabetic | 3 | (기본값) 텍스트의 기준선을 지정된 위치에 세로로 정렬합니다. |
QCanvasPainter::TextBaseline::Bottom | 4 | 텍스트의 아래쪽을 지정된 위치에 세로로 정렬합니다. |
setTextBaseline() 및 fillText()도 참조하십시오 .
enum class QCanvasPainter::TextDirection
TextDirection은 텍스트가 가로로 정렬되는 방식을 정의하는 데 사용됩니다.
| 상수 | 값 | 설명 |
|---|---|---|
QCanvasPainter::TextDirection::LeftToRight | 0 | 텍스트 방향은 왼쪽에서 오른쪽입니다. |
QCanvasPainter::TextDirection::RightToLeft | 1 | 텍스트 방향은 오른쪽에서 왼쪽입니다. |
QCanvasPainter::TextDirection::Inherit | 2 | (기본값) 텍스트 방향은 QGuiApplication layoutDirection에서 상속됩니다. https://doc.qt.io/qt-6/qguiapplication.html#layoutDirection-prop 을 참조하십시오. |
QCanvasPainter::TextDirection::Auto | 3 | 텍스트 방향은 텍스트 문자열을 기반으로 자동으로 감지됩니다. QString::isRightToLeft ()를 참조하세요. |
참고: 텍스트를 분석해야 하므로 다른 옵션보다 속도가 느릴 수 있습니다.
setTextDirection(), setTextAlign() 및 fillText()도 참조하세요 .
enum class QCanvasPainter::WrapMode
WrapMode는 텍스트가 여러 줄로 래핑되는 방식을 정의하는 데 사용됩니다.
| 상수 | 값 | 설명 |
|---|---|---|
QCanvasPainter::WrapMode::NoWrap | 0 | (기본값) 줄 바꿈이 수행되지 않습니다. 텍스트에 개행이 충분하지 않은 경우 contentWidth가 설정된 너비를 초과합니다. |
QCanvasPainter::WrapMode::Wrap | 1 | 가능하면 단어 경계에서 줄 바꿈이 발생하고, 그렇지 않으면 단어 중간을 포함하여 줄의 적절한 지점에서 줄 바꿈이 발생합니다. |
QCanvasPainter::WrapMode::WordWrap | 2 | 줄 바꿈은 단어 경계에서만 수행됩니다. 단어가 너무 길면 콘텐츠 너비가 설정된 너비를 초과합니다. |
QCanvasPainter::WrapMode::WrapAnywhere | 3 | 줄 바꿈은 단어 중간에 있더라도 줄의 어느 지점에서나 수행됩니다. |
setTextWrapMode() 및 fillText()도 참조하세요 .
멤버 함수 문서
QCanvasPainter::QCanvasPainter()
화가를 구성합니다.
[noexcept] QCanvasPainter::~QCanvasPainter()
화가를 파괴합니다.
qsizetype QCanvasPainter::activeImageCount() const
이 QCanvasPainter 에 등록된 활성 QCanvasImage 객체의 수를 반환합니다. 여기에는 gradients 에 대해 내부적으로 생성된 이미지도 포함됩니다.
QCanvasImage QCanvasOffscreenCanvas 인스턴스나 외부에서 관리되는 텍스처를 등록하여 생성된 객체는 이 함수에 고려되지 않습니다.
activeImageMemoryUsage(), addImage() 및 removeImage()도 참조하세요 .
qsizetype QCanvasPainter::activeImageMemoryUsage() const
addImage() 오버로드로 인해 생성된 이 페인터의 모든 활성 QCanvasImage 인스턴스에 대해 이미지(픽셀) 데이터에 사용된 메모리 근사치(킬로바이트)를 반환합니다. QImage. 또한 gradients 에 대해 내부적으로 생성된 이미지의 데이터도 포함됩니다.
QCanvasPainter addImage ()이 반환된 후에는 CPU 측 QImage 데이터의 복사본을 유지하지 않습니다. 따라서 이 함수의 결과는 텍스처에 사용되는 GPU 메모리의 근사치입니다.
참고: 이 값은 이미지 형식과 치수를 기반으로 한 추정치일 뿐입니다. Qt는 텍스처 데이터가 GPU 측의 메모리에 어떻게 저장되고 배치되는지 알지 못합니다.
다른 addImage()를 통해 등록된 오프스크린 캔버스와 외부에서 관리되는 텍스처는 이 함수에 의해 고려되지 않습니다.
모든 유효한 QCanvasImage, 개별 크기는 항상 sizeInBytes()를 호출하여 바이트 단위로 쿼리할 수 있습니다. 이 함수는 QCanvasOffscreenCanvas 또는 QRhiTexture 에서 QCanvasImage 을 생성한 경우에도 유효한 결과를 반환하지만 밉맵 또는 다중 샘플 데이터는 고려하지 않습니다.
activeImageCount(), addImage() 및 removeImage()도 참조하세요 .
QCanvasImage QCanvasPainter::addImage(const QImage &image, QCanvasPainter::ImageFlags flags = {})
image 을 추가하고 flags 을 텍스처로 사용할 수 있도록 합니다. 텍스처 ID 및 이미지에 대한 기타 정보와 함께 QCanvasImage 을 반환합니다. 반환된 QCanvasImage 은 drawImage 및 QCanvasImagePattern 과 함께 사용할 수 있습니다. 이 메서드를 호출한 후에는 image QImage 을 메모리에 보관할 필요가 없습니다.
동일한 image 으로 호출하는 것은 캐시 히트가 예상되므로 저렴한 작업입니다.
추가 이미지()를 한 번만 호출하도록 최적화할 때는 주의를 기울여야 합니다. 애플리케이션 설계에 따라 이 정도로는 충분하지 않을 수도 있습니다. 예를 들어 위젯을 새로운 최상위 레벨로 이동하여 페인터가 내부적으로 새로운 QRhi 에 연결되어 있어 기본 그래픽 리소스가 손실된 경우 image 에서 기본 그래픽 텍스처를 다시 생성하려면 이 함수를 호출하는 것이 필수적입니다.
drawImage() 및 removeImage()도 참조하세요 .
QCanvasImage QCanvasPainter::addImage(QRhiTexture *texture, QCanvasPainter::ImageFlags flags = {})
페인터가 텍스처로 사용할 수 있는 texture 와 flags 을 추가합니다. NativeTexture 플래그는 암시적으로 설정됩니다. 반환된 QCanvasImage 은 drawImage 및 QCanvasImagePattern 과 함께 사용할 수 있습니다.
참고: texture 의 소유권은 가져가지 않습니다.
이 함수는 오버로드된 함수입니다.
drawImage() 및 removeImage()도 참조하세요 .
QCanvasImage QCanvasPainter::addImage(const QCanvasOffscreenCanvas &canvas, QCanvasPainter::ImageFlags flags = {})
canvas 을 화가에 flags 으로 등록하여 이미지로 사용할 수 있도록 합니다. 반환된 QCanvasImage 은 drawImage 및 QCanvasImagePattern 과 함께 사용할 수 있습니다.
참고: canvas 은 기본 네이티브 그래픽 리소스를 계속 관리하므로 removeImage()이 canvas 을 무효로 만들지 않습니다.
이 함수는 오버로드된 함수입니다.
drawImage() 및 removeImage()도 참조하세요 .
void QCanvasPainter::addPath(const QPainterPath &path)
path 을 현재 경로에 추가합니다.
참고: QCanvasPainter 은 WindingFill(0이 아닌) 채우기 규칙을 사용하므로 모든 QPainterPath가 올바르게 렌더링되지 않습니다. 이는 경로에 구멍이 있는 텍스트 문자가 포함된 경우에 특히 두드러집니다.
참고: 이 메서드는 주로 QPainter 및 QPainterPath 과의 호환성을 위해 사용할 수 있습니다. QCanvasPainter 메서드로 직접 경로를 그리는 것에 비해 성능이 향상되지는 않습니다.
void QCanvasPainter::addPath(const QCanvasPath &path, const QTransform &transform = QTransform())
path 을 현재 경로에 추가하고, 선택적으로 transform 을 사용하여 경로 지점을 변경합니다. transform 이 제공되지 않거나 ID 행렬인 경우 이 작업은 경로 데이터를 재사용하므로 매우 빠릅니다.
![]() | // m_path is QCanvasPath if (m_path.isEmpty()) m_path.circle(60, 60, 40); p->beginPath(); p->addPath(m_path); p->addPath(m_path, QTransform::fromTranslate(80, 80)); p->fill(); p->stroke(); |
void QCanvasPainter::addPath(const QCanvasPath &path, qsizetype start, qsizetype count, const QTransform &transform = QTransform())
start 명령에서 시작하여 count 명령의 양을 포함하여 현재 경로에 path 을 추가합니다. 선택적으로 transform 을 사용하여 경로 지점을 변경할 수 있습니다. start 및 count 범위가 확인되어 QCanvasPath::commandsSize() 이상으로 명령이 액세스되지 않도록 합니다. 경로가 현재 경로 위치에서 계속되지 않아야 하는 경우에는 path.positionAt(start - 1) 과 같이 moveTo()을 먼저 호출합니다.
![]() | // m_path is QCanvasPath if (m_path.isEmpty()) { m_path.moveTo(20, 60); for (int i = 1; i < 160; i++) { m_path.lineTo(20 + i, 60 + 20 * sin(0.1 * i)); } } p->stroke(m_path); p->beginPath(); p->addPath(m_path, 20, 100, QTransform::fromTranslate(0, 80)); p->stroke(); |
void QCanvasPainter::arc(float centerX, float centerY, float radius, float a0, float a1, QCanvasPainter::PathWinding direction = PathWinding::ClockWise, QCanvasPainter::PathConnection connection = PathConnection::Connected)
새로운 원호 모양의 하위 경로를 만듭니다. 호의 중심은 centerX, centerY, radius 에 있으며 호는 a0 에서 a1 로 그려지고 direction (ClockWise 또는 CounterClockWise)에서 스윕됩니다. connection 가 NotConnected 인 경우 호는 이전 경로 위치에서 호의 시작점까지 선을 추가하지 않습니다. 각도는 라디안으로 지정됩니다.
![]() | p->beginPath(); p->moveTo(100, 100); p->arc(100, 100, 80, 0, 1.5 * M_PI); p->closePath(); p->fill(); p->stroke(); |
참고: HTML 캔버스 2D 컨텍스트에서는 원을 그리는 데 arc()를 사용하지만 QCanvasPainter 에서는 circle() 또는 ellipse()를 사용하는 것이 좋습니다.
void QCanvasPainter::arc(QPointF centerPoint, float radius, float a0, float a1, QCanvasPainter::PathWinding direction = PathWinding::ClockWise, QCanvasPainter::PathConnection connection = PathConnection::Connected)
새로운 원호 모양의 하위 경로를 만듭니다. 호의 중심은 centerPoint, radius 이며, 호는 a0 에서 a1 으로 그려지고 direction (ClockWise 또는 CounterClockWise)에서 스윕됩니다. connection 가 NotConnected 인 경우 호는 이전 경로 위치에서 호의 시작점까지 선을 추가하지 않습니다. 각도는 라디안으로 지정됩니다.
참고: HTML 캔버스 2D 컨텍스트에서는 원 그리기에 arc()를 사용하지만 QCanvasPainter 에서는 circle() 또는 ellipse()를 사용하는 것이 좋습니다.
이것은 오버로드된 함수입니다.
void QCanvasPainter::arcTo(float x1, float y1, float x2, float y2, float radius)
마지막 경로 지점으로 정의된 모서리와 지정된 두 지점(x1, y1 및 x2, y2)에 호 세그먼트를 radius 로 추가합니다. 호는 필요한 경우 직선을 사용하여 경로의 마지막 지점에 자동으로 연결됩니다.
![]() | p->beginPath(); p->moveTo(20, 20); p->arcTo(240, 20, 20, 220, 50); p->arcTo(20, 220, 20, 20, 30); p->stroke(); |
void QCanvasPainter::arcTo(QPointF controlPoint1, QPointF controlPoint2, float radius)
마지막 경로 지점으로 정의된 모서리와 지정된 두 지점(controlPoint1 및 controlPoint2)에 호 세그먼트를 추가합니다( radius). 호는 필요한 경우 직선을 사용하여 경로의 마지막 지점에 자동으로 연결됩니다.
이 함수는 오버로드된 함수입니다.
void QCanvasPainter::beginHoleSubPath()
구멍 하위 경로를 시작합니다. 이는 setPathWinding(QCanvasPainter::PathWinding::ClockWise))에 해당합니다.
![]() | p->beginPath(); p->circle(100, 100, 80); p->beginHoleSubPath(); p->rect(60, 60, 80, 80); p->beginSolidSubPath(); p->circle(100, 100, 20); p->fill(); p->stroke(); |
beginSolidSubPath()도 참조하세요 .
void QCanvasPainter::beginPath()
현재 경로를 지우면서 새 경로를 그리기 시작합니다.
void QCanvasPainter::beginSolidSubPath()
솔리드 하위 경로를 시작합니다. 이는 setPathWinding(QCanvasPainter::PathWinding::CounterClockWise))에 해당합니다.
beginHoleSubPath()도 참조하세요 .
void QCanvasPainter::bezierCurveTo(float cp1X, float cp1Y, float cp2X, float cp2Y, float x, float y)
두 개의 제어점(cp1X, cp1Y 및 cp2X, cp2Y)을 통해 경로의 마지막 지점부터 지정된 지점(x, y)까지 큐빅 베지어 세그먼트를 추가합니다.
![]() | p->beginPath(); p->moveTo(20, 20); p->bezierCurveTo(150, 50, 50, 250, 180, 120); p->stroke(); |
void QCanvasPainter::bezierCurveTo(QPointF controlPoint1, QPointF controlPoint2, QPointF endPoint)
두 개의 제어점(controlPoint1 및 controlPoint2)을 통해 경로의 마지막 지점부터 지정된 지점 endPoint 까지 큐빅 베지어 세그먼트를 추가합니다.
이 함수는 오버로드된 함수입니다.
void QCanvasPainter::circle(float centerX, float centerY, float radius)
radius 를 사용하여 ( centerX, centerY)에 원 모양의 하위 경로를 새로 만듭니다.
![]() | p->beginPath(); p->circle(100, 100, 80); p->fill(); p->stroke(); |
void QCanvasPainter::circle(QPointF centerPoint, float radius)
radius 을 사용하여 centerPoint 에 원 모양의 하위 경로를 새로 만듭니다.
이것은 오버로드된 함수입니다.
void QCanvasPainter::cleanupResources()
캐시에서 사용하지 않는 텍스처를 삭제하도록 스케줄링합니다.
또한 메모리 사용량을 최소화하기 위해 이 함수를 호출하면 다른 캐시 및 풀이 축소될 수 있습니다. 이로 인해 나중에 드로잉 호출 비용이 더 많이 발생할 수 있습니다.
void QCanvasPainter::clearRect(float x, float y, float width, float height)
x, y, width, height 으로 지정된 직사각형을 투명한 검정색으로 채워 직사각형 영역의 픽셀을 지웁니다. 지우기에는 블렌딩이 필요하지 않으므로 fillRect()보다 빠를 수 있습니다.
![]() | p->beginPath(); p->circle(100, 100, 80); p->fill(); p->stroke(); p->clearRect(60, 0, 80, 120); |
void QCanvasPainter::clearRect(const QRectF &rect)
rect 으로 지정된 직사각형을 투명한 검정색으로 채워 직사각형 영역의 픽셀을 지웁니다. QRectF 을 사용하는 오버로드된 메서드입니다.
이것은 과부하된 함수입니다.
void QCanvasPainter::closePath()
선분으로 현재 하위 경로를 닫습니다. 이는 lineTo([시작점])을 마지막 경로 요소로 사용하는 것과 같습니다.
QCanvasOffscreenCanvas QCanvasPainter::createCanvas(QSize pixelSize, int sampleCount = 1, QCanvasOffscreenCanvas::Flags flags = {})
주어진 pixelSize, sampleCount, flags 을 사용하여 새 오프스크린 캔버스를 반환합니다.
캔버스의 크기는 픽셀 단위로 지정됩니다. pixelSize , sampleCount, flags 속성은 이후에는 변경할 수 없습니다. 크기, 샘플 수 또는 플래그가 다른 캔버스를 얻으려면 새 캔버스를 만듭니다.
그리기 명령으로 화면 밖 캔버스를 대상으로 하려면 하위 수준 API로 작업할 때는 적절한 QCanvasRhiPaintDriver::beginPaint() 오버로드를, 편의 위젯이나 Qt Quick 항목 클래스를 사용할 때는 QCanvasPainterWidget::beginCanvasPainting() 또는 QCanvasPainterItemRenderer::beginCanvasPainting()를 호출하세요.
일반적으로 캔버스에 그림을 그리면 캔버스의 내용이 지워집니다. 이를 비활성화하려면 flags 에 PreserveContents 를 전달하세요.
캔버스에 다중 샘플 렌더링(다중 샘플 앤티앨리어싱, MSAA)을 요청하려면 샘플 수를 1보다 큰 값(예: 4 또는 8)으로 설정합니다. 그러나 멀티샘플링이 활성화된 경우 렌더 패스 간 캔버스 콘텐츠 보존은 지원되지 않으며, 이 경우 PreserveContents 플래그는 작동하지 않습니다.
void QCanvasPainter::destroyCanvas(QCanvasOffscreenCanvas &canvas)
canvas 을 뒷받침하는 리소스를 파괴합니다. canvas 은 null canvas 이 됩니다.
페인터는 소멸 시 자동으로 이 작업을 수행합니다. 따라서 이 함수는 관련 리소스를 즉시 해제해야 할 때만 호출하면 됩니다.
float QCanvasPainter::devicePixelRatio() const
물리적 픽셀과 디바이스 독립 픽셀 간의 비율을 반환합니다. 기본값은 1.0 입니다.
void QCanvasPainter::drawBoxShadow(const QCanvasBoxShadow &shadow)
상자를 그립니다 shadow. 그림자는 shadow 에서 설정한 위치, 크기, 색상, 흐림 등으로 그려집니다. 이 메서드 전에 beginPath()를 호출할 필요는 없습니다.
참고: drawBoxShadow()가 적용되는 영역을 시각적으로 확인하려면 QCPAINTER_DEBUG_SHADOW_RECT 환경 변수를 설정하세요.
![]() | QRectF rect(40, 40, 120, 120); QRectF shadowRect = rect.translated(-2, 4); QCanvasBoxShadow shadow(shadowRect, 0, 30); p->drawBoxShadow(shadow); p->beginPath(); p->roundRect(rect, 30); p->setFillStyle("#2CDE85"); p->fill(); |
QCanvasBoxShadow 를참조하세요 .
void QCanvasPainter::drawImage(const QCanvasImage &image, float x, float y)
image 를 기본 크기인 x, y 로 그립니다.
![]() | static QImage logo(":/qt_logo.png"); QCanvasImage image = p->addImage(logo); p->drawImage(image, 36, 36); |
addImage()도 참조하세요 .
void QCanvasPainter::drawImage(const QCanvasImage &image, const QRectF &destinationRect)
image 를 destinationRect 의 위치와 크기로 그립니다.
이 함수는 오버로드된 함수입니다.
addImage()도 참조하세요 .
void QCanvasPainter::drawImage(const QCanvasImage &image, const QRectF &sourceRect, const QRectF &destinationRect)
이미지의 sourceRect 영역에서 destinationRect 의 위치와 크기에 image 를 그립니다.
![]() | static QImage logo(":/qt_logo.png"); QCanvasImage image = p->addImage(logo); QRectF sourceRect(20, 30, 54, 76); QRectF destinationRect(0, 0, 200, 200); p->drawImage(image, sourceRect, destinationRect); |
이 함수는 오버로드된 함수입니다.
addImage()도 참조하세요 .
void QCanvasPainter::drawImage(const QCanvasImage &image, float x, float y, float width, float height)
주어진 width 및 height 에서 image 를 x, y 로 그립니다.
![]() | static QImage logo(":/qt_logo.png"); QCanvasImage image = p->addImage(logo); p->drawImage(image, 50, 0, 100, 200); |
이것은 오버로드된 함수입니다.
addImage()도 참조하세요 .
void QCanvasPainter::ellipse(float centerX, float centerY, float radiusX, float radiusY)
radiusX 및 radiusY 을 사용하여 ( centerX, centerY)에 새 타원 모양의 하위 경로를 만듭니다.
![]() | p->beginPath(); p->ellipse(100, 100, 80, 60); p->fill(); p->stroke(); |
void QCanvasPainter::ellipse(const QRectF &rect)
rect 에 타원 모양의 하위 경로를 새로 만듭니다. 이 타원은 rect 영역을 포함합니다.
![]() | QRectF rect(40, 20, 120, 160); p->fillRect(rect); p->beginPath(); p->ellipse(rect); p->stroke(); |
이 함수는 오버로드된 함수입니다.
void QCanvasPainter::ellipse(QPointF centerPoint, float radiusX, float radiusY)
radiusX 및 radiusY 를 사용하여 centerPoint 에 타원 모양의 하위 경로를 새로 만듭니다.
이것은 오버로드된 함수입니다.
void QCanvasPainter::fill()
현재 경로를 현재 채우기 스타일로 채웁니다.
![]() | p->beginPath(); p->rect(20, 20, 40, 160); p->rect(140, 20, 40, 160); p->circle(100, 100, 60); p->fill(); |
setFillStyle()도 참조하세요 .
void QCanvasPainter::fill(const QCanvasPath &path, int pathGroup = 0)
path 을 현재 채우기 스타일로 채우고 pathGroup 에 속합니다. 경로에 더 많은 명령이 포함되어 있고 대부분 정적인 경우 QCanvasPath 을 통해 채우는 것이 최적입니다. 기본적으로 pathGroup 은 0 이므로 첫 번째 그룹을 사용합니다. pathGroup 가 -1 인 경우 경로가 GPU 측에 캐시되지 않습니다. 경로 캐시 그룹 사용에 대한 자세한 내용은 QCanvasPath 문서를 참조하세요. 이 메서드 앞에 beginPath()를 호출할 필요는 없습니다.
![]() | // m_path is QCanvasPath if (m_path.isEmpty()) { for (int i = 0; i < 16; i++) { float w = 100 + 60 * sin(i); m_path.rect(100 - w * 0.5, 22 + i * 10, w, 6); } } p->fill(m_path); |
이 함수는 오버로드된 함수입니다.
setFillStyle()도 참조하세요 .
void QCanvasPainter::fillRect(float x, float y, float width, float height)
채워진 직사각형을 지정된 위치( x, y)에 width, height 크기로 그립니다.
참고: 이것은 편의를 위해 제공됩니다. 직사각형을 하나 이상 채울 때는 rect()를 사용하는 것이 좋습니다.
![]() | p->fillRect(20, 20, 160, 160); // The above code does same as: // p->beginPath(); // p->rect(20, 20, 160, 160); // p->fill(); |
void QCanvasPainter::fillRect(const QRectF &rect)
채워진 직사각형을 rect 에 그립니다. 이것은 QRectF 을 사용하는 오버로드된 메서드입니다.
참고: 편의를 위해 제공된 것입니다. 직사각형을 하나 이상 채우려면 rect()를 사용하는 것이 좋습니다.
이 함수는 과부하된 함수입니다.
void QCanvasPainter::fillText(const QString &text, float x, float y, float maxWidth = -1)
지정된 위치( x, y)에 text 문자열을 현재 textAlign 및 textBaseline을 사용하여 그립니다. 텍스트를 여러 줄로 줄 바꿈하려면 maxWidth 매개변수를 원하는 행 너비(픽셀)로 설정합니다. 행의 시작 부분에서 공백이 제거되고, 단어 경계에서 또는 새 줄 문자를 만나면 텍스트가 분할됩니다. 최대 너비보다 긴 단어는 가장 가까운 문자에서 분할됩니다(즉, 하이픈 없이).
void QCanvasPainter::fillText(const QString &text, const QRectF &rect)
rect 안에 text 문자열을 현재 textAlign 및 textBaseline과 함께 그립니다. rect 매개변수의 너비는 maxWidth로 사용됩니다.
이것은 QRectF 을 사용하는 오버로드된 메서드입니다. 이 메서드로 텍스트를 그릴 때 텍스트 기준선을 TextBaseline::Top 또는 TextBaseline::Middle 로 설정하는 것이 유용할 때가 많습니다.
이 함수는 과부하된 함수입니다.
void QCanvasPainter::fillText(const QString &text, QPointF point, float maxWidth = -1)
지정된 point 에 현재 textAlign 및 textBaseline을 사용하여 text 문자열을 그립니다. 텍스트를 여러 줄로 줄 바꿈하려면 maxWidth 매개변수를 원하는 행 너비(픽셀)로 설정합니다. 행의 시작 부분에서 공백이 제거되고, 단어 경계에서 또는 새 줄 문자를 만나면 텍스트가 분할됩니다. 최대 너비보다 긴 단어는 가장 가까운 문자에서 분할됩니다(즉, 하이픈 없이).
이것은 QPointF 을 사용하는 오버로드된 메서드입니다.
이것은 과부하된 함수입니다.
QTransform QCanvasPainter::getTransform() const
현재 트랜스폼을 반환합니다.
void QCanvasPainter::lineTo(float x, float y)
경로의 마지막 지점에서 ( x, y) 지점까지 선분을 추가합니다.
![]() | p->beginPath(); p->moveTo(20, 20); p->lineTo(140, 180); p->lineTo(180, 120); p->stroke(); |
void QCanvasPainter::lineTo(QPointF point)
경로의 마지막 지점부터 point 까지 선분을 추가합니다.
이 함수는 오버로드된 함수입니다.
[static] float QCanvasPainter::mmToPx(float mm)
밀리미터 mm 를 픽셀로 변환하는 정적 도우미 메서드입니다. 이를 통해 해상도 독립적인 그리기를 할 수 있습니다. 예를 들어 선 너비를 2mm로 설정하려면 다음을 사용합니다:
painter->setLineWidth(QCanvasPainter::mmToPx(2));
void QCanvasPainter::moveTo(float x, float y)
( x, y)을 첫 번째 지점으로 하여 새 하위 경로를 시작합니다.
void QCanvasPainter::moveTo(QPointF point)
point 을 첫 번째 지점으로 하여 새 하위 경로를 시작합니다.
이 함수는 오버로드된 함수입니다.
[static] float QCanvasPainter::ptToPx(float pt)
포인트 pt 를 픽셀로 변환하는 정적 헬퍼 메서드입니다.
void QCanvasPainter::quadraticCurveTo(float cpX, float cpY, float x, float y)
제어점(cpX, cpY)을 통해 경로의 마지막 지점부터 지정된 지점(x, y)까지 이차 베지어 세그먼트를 추가합니다.
![]() | p->beginPath(); p->moveTo(20, 20); p->quadraticCurveTo(150, 50, 180, 180); p->quadraticCurveTo(20, 220, 20, 20); p->fill(); p->stroke(); |
void QCanvasPainter::quadraticCurveTo(QPointF controlPoint, QPointF endPoint)
경로의 마지막 지점에서 controlPoint 을 통해 지정된 endPoint 까지 이차 베지어 세그먼트를 추가합니다.
이 함수는 오버로드된 함수입니다.
void QCanvasPainter::rect(float x, float y, float width, float height)
x, y, width, height 위치에 직사각형 모양의 하위 경로를 새로 만듭니다.
![]() | p->beginPath(); p->rect(20, 20, 160, 160); p->fill(); p->stroke(); |
void QCanvasPainter::rect(const QRectF &rect)
rect 에 직사각형 모양의 하위 경로를 새로 만듭니다. 이것은 QRectF 을 사용하는 오버로드된 메서드입니다.
이것은 과부하된 함수입니다.
void QCanvasPainter::removeImage(const QCanvasImage &image)
image 와 관련된 리소스를 해제하고 페인터에서 이미지를 제거합니다.
참고: 텍스처와 같은 리소스는 어차피 페인터 소멸자에서 해제되므로 일반적으로 호출할 필요는 없습니다. 이 함수는 이미지가 많아 메모리 사용량을 줄여야 할 필요가 있고 그 중 일부는 더 이상 사용하지 않는 경우에 유용합니다.
참고: 제거된 이미지는 더 이상 페인트 작업에서 사용할 수 없습니다.
참고: 기본 3D API로 생성된 텍스처와 같은 리소스는 즉시 해제되지 않을 수 있습니다. 이러한 작업은 다음 프레임으로 연기될 수 있으며, 일반적으로 활성 그리기 호출 집합이 제출된 후 QCanvasPainter 이 다시 페인팅을 시작할 때 지연될 수 있습니다.
addImage()도 참조하세요 .
void QCanvasPainter::removePathGroup(int pathGroup)
페인터 캐시에서 pathGroup 을 제거합니다. 이 후 fill() 또는 stroke()를 호출하여 pathGroup 경로를 그룹 캐시에 다시 생성합니다.
참고: 페인터 소멸자에서 경로가 제거되므로 일반적으로 이 함수를 호출할 필요는 없습니다. pathGroup 가 더 이상 필요하지 않거나 경로에 과거보다 훨씬 적은 명령이 있어 버퍼 크기를 줄여야 하는 경우 등 메모리 사용량을 줄일 때만 이 기능을 사용하세요.
QCanvasPainter::RenderHints QCanvasPainter::renderHints() const
이 페인터에 설정된 렌더링 힌트를 지정하는 플래그를 반환합니다.
setRenderHints() 및 setRenderHint()도 참조하세요 .
void QCanvasPainter::reset()
현재 페인터 상태를 기본값으로 재설정합니다.
참고: 이 메서드는 캔버스 버퍼를 시각적으로 지우지 않는다는 점에서 HTML 캔버스 2D 컨텍스트 재설정() 메서드와 다릅니다.
![]() | // Adjust the paint state p->setStrokeStyle("#00414A"); p->setFillStyle("#2CDE85"); p->setLineWidth(10); QRectF rect(20, 40, 160, 50); p->translate(rect.center()); p->rotate(qDegreesToRadians(-25)); p->translate(-rect.center()); p->beginPath(); p->roundRect(rect, 20); p->fill(); p->stroke(); // Reset to default paint state p->reset(); p->fillRect(20, 140, 60, 40); p->strokeRect(120, 140, 60, 40); |
void QCanvasPainter::resetClipping()
클리핑을 초기화 및 비활성화합니다.
setClipRect()도 참조하세요 .
void QCanvasPainter::resetTransform()
현재 변환을 아이덴티티 행렬로 재설정합니다.
void QCanvasPainter::restore()
현재 렌더링 상태를 팝업하고 복원합니다. 따라서 이전에 저장된 상태가 복원됩니다. save ()가 호출되지 않았고 상태 스택이 비어 있는 경우 이 함수를 호출해도 아무 효과가 없습니다.
save()도 참조하세요 .
void QCanvasPainter::rotate(float angle)
현재 좌표계를 시계 방향으로 회전합니다 angle.
각도는 라디안 단위로 지정됩니다. qDegreesToRadians ()를 사용하여 도에서 라디안으로 변환합니다.
![]() | QRectF rect(20, 70, 160, 60); p->translate(rect.center()); p->rotate(-M_PI / 4); p->translate(-rect.center()); p->beginPath(); p->roundRect(rect, 10); p->fill(); p->stroke(); p->setFillStyle(QColorConstants::Black); p->fillText("Cute!", rect); |
void QCanvasPainter::roundRect(float x, float y, float width, float height, float radius)
위치에 둥근 직사각형 모양의 하위 경로를 새로 만듭니다 x, y 크기 width, height. 모서리 반올림은 radius 입니다.
![]() | p->beginPath(); p->roundRect(20, 20, 160, 160, 30); p->fill(); p->stroke(); |
void QCanvasPainter::roundRect(const QRectF &rect, float radius)
radius 모서리가 있는 rect 에 둥근 직사각형 모양의 하위 경로를 새로 만듭니다. 이것은 QRectF 을 사용하는 오버로드된 메서드입니다.
이것은 과부하된 함수입니다.
void QCanvasPainter::roundRect(const QRectF &rect, float radiusTopLeft, float radiusTopRight, float radiusBottomRight, float radiusBottomLeft)
rect 에 둥근 직사각형 모양의 하위 경로를 새로 만듭니다. 모서리 반올림은 radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft 을 사용하여 모서리마다 다를 수 있습니다.
이 함수는 오버로드된 함수입니다.
void QCanvasPainter::roundRect(float x, float y, float width, float height, float radiusTopLeft, float radiusTopRight, float radiusBottomRight, float radiusBottomLeft)
x, y 위치에 크기가 width, height 인 둥근 직사각형 모양의 하위 경로를 새로 만듭니다. 모서리 반올림은 radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft 과 같이 모서리마다 다를 수 있습니다.
![]() | p->beginPath(); p->roundRect(20, 20, 160, 160, 0, 40, 20, 80); p->fill(); p->stroke(); |
이것은 오버로드된 함수입니다.
void QCanvasPainter::save()
현재 렌더링 상태를 상태 스택에 푸시하고 저장합니다. 상태를 복원하려면 일치하는 restore()를 사용해야 합니다.
![]() | p->strokeRect(20, 20, 160, 40); // Save and adjust the paint state p->save(); p->setStrokeStyle(QColorConstants::Black); p->setLineWidth(3); p->rotate(0.1); p->strokeRect(20, 80, 180, 20); // Restore the saved paint state p->restore(); p->strokeRect(20, 140, 160, 40); |
restore()도 참조하세요 .
void QCanvasPainter::scale(float scale)
현재 좌표계의 배율을 scale 으로 조정합니다. x 및 y 좌표 모두 균등하게 배율이 조정됩니다.
![]() | QRectF rect(20, 20, 160, 160); for (int i = 0; i < 20; i++) { p->beginPath(); p->roundRect(rect, 10); p->stroke(); p->translate(rect.center()); p->scale(0.8); p->translate(-rect.center()); } |
void QCanvasPainter::scale(float scaleX, float scaleY)
현재 좌표계의 배율을 scaleX 및 scaleY 으로 조정합니다.
이 함수는 오버로드된 함수입니다.
void QCanvasPainter::setAntialias(float antialias)
현재 앤티앨리어싱 양을 픽셀 단위로 antialias 로 설정합니다. 앤티앨리어싱이 많을수록 페인팅이 더 부드러워집니다. 이미지나 텍스트가 아닌 채우기 및 획 페인팅에만 영향을 줍니다. 기본값은 1.0 이며 최대값은 10.0 입니다.
앤티앨리어싱은 경로별로 수정할 수 있으므로 각 획/채우기 전에 설정할 수 있습니다. 전체 캔버스 페인터에서 앤티앨리어싱을 비활성화하려면 QCanvasPainter::RenderHint::Antialiasing 렌더링 힌트를 사용하세요.
![]() | p->setLineWidth(6); for (int i = 1; i < 10 ; i++) { int y = i * 20; p->setAntialias(i); p->beginPath(); p->moveTo(20, y); p->bezierCurveTo(80, y + 20, 120, y - 20, 180, y); p->stroke(); } |
setRenderHints() 및 setTextAntialias()도 참조하세요 .
void QCanvasPainter::setBrushTransform(const QTransform &transform)
현재 브러시 변환을 transform 으로 설정합니다. 이 변환은 획 및 채우기 브러시 모두에 적용됩니다.
void QCanvasPainter::setClipRect(float x, float y, float width, float height)
현재 가위 직사각형을 (x, y, width, height)로 설정합니다. 가위 사각형은 현재 변형에 의해 변형됩니다.
참고: 클리핑에는 약간의 성능 비용이 발생하므로 필요한 경우에만 사용해야 합니다.
![]() | QRectF viewArea(20, 20, 160, 160); p->setClipRect(viewArea); p->beginPath(); p->circle(40, 40, 110); p->fill(); p->setFillStyle(Qt::black); p->fillText("Clip me...", 40, 100); p->strokeRect(viewArea); |
resetClipping()도 참조하세요 .
void QCanvasPainter::setClipRect(const QRectF &rect)
현재 가위 직사각형을 rect 로 설정합니다. 가위 직사각형은 현재 변형에 의해 변형됩니다.
참고: 클리핑에는 약간의 성능 비용이 발생하므로 필요한 경우에만 사용해야 합니다.
이 함수는 과부하가 걸린 함수입니다.
resetClipping()도 참조하세요 .
void QCanvasPainter::setFillStyle(const QColor &color)
채우기 스타일을 단색 color 으로 설정합니다. 기본 채우기 스타일은 검은색 단색(0, 0, 0, 1)입니다.
![]() | p->setFillStyle(QColorConstants::Black); p->fillRect(20, 20, 160, 160); p->setFillStyle(QColor(0, 65, 74)); p->fillRect(40, 40, 120, 120); p->setFillStyle("#2CDE85"); p->fillRect(60, 60, 80, 80); |
void QCanvasPainter::setFillStyle(const QCanvasBrush &brush)
채우기 스타일을 brush 로 설정합니다. 기본 채우기 스타일은 검은색 단색(0, 0, 0, 1)입니다.
![]() | QCanvasRadialGradient g2(140, 40, 300); g2.setStartColor(QColor(44, 222, 133)); g2.setEndColor(QColor(0, 65, 74)); p->setFillStyle(g2); p->fillRect(20, 20, 160, 160); g2.setCenterPosition(100, 100); p->setFillStyle(g2); p->fillRect(40, 40, 120, 120); |
이 함수는 오버로드된 함수입니다.
void QCanvasPainter::setFont(const QFont &font)
font 을 현재 활성 글꼴로 설정합니다.
void QCanvasPainter::setGlobalAlpha(float alpha)
글로벌 알파(투명도) 값을 alpha 로 설정합니다. 이 알파 값은 렌더링된 모든 도형에 적용됩니다. 이미 투명한 경로도 비례적으로 더 투명해집니다. 알파는 0.0(완전 투명)에서 1.0(완전 불투명) 사이여야 합니다. 기본 알파는 1.0 입니다.
![]() | static QImage logo(":/qt_logo2.png"); QCanvasImage image = p->addImage(logo); p->setFillStyle("#d9f720"); for (int i = 0; i < 4; i++) { float x = 100 * (i % 2); float y = 100 * (i / 2); QRectF rect(x, y, 100, 100); p->setGlobalAlpha(1.0 - i * 0.3); p->fillRect(rect); p->drawImage(image, rect); } |
void QCanvasPainter::setGlobalBrightness(float value)
전역 밝기를 value 로 설정합니다. 이 밝기는 렌더링된 모든 도형에 적용됩니다. 값이 0이면 페인팅이 완전히 검은색이 됩니다. 밝기를 높이려면 값을 1.0보다 크게 설정할 수도 있습니다. 기본적으로 밝기는 1.0 입니다.
![]() | static QImage logo(":/qt_logo2.png"); QCanvasImage image = p->addImage(logo); p->setFillStyle("#d9f720"); for (int i = 0; i < 4; i++) { float x = 100 * (i % 2); float y = 100 * (i / 2); QRectF rect(x, y, 100, 100); p->setGlobalBrightness(1.5 - i * 0.45); p->fillRect(rect); p->drawImage(image, rect); } |
void QCanvasPainter::setGlobalCompositeOperation(QCanvasPainter::CompositeOperation operation)
글로벌 합성 작업 모드를 operation 으로 설정합니다. 이 모드는 모든 페인팅 작업에 적용됩니다. 기본 모드는 QCanvasPainter::CompositeOperation::SourceOver 입니다.
void QCanvasPainter::setGlobalContrast(float value)
전역 대비를 value 로 설정합니다. 이 대비는 렌더링된 모든 도형에 적용됩니다. 값이 0이면 페인팅이 완전히 회색(0.5, 0.5, 0.5)이 됩니다. 대비를 높이려면 값을 1.0보다 크게 설정할 수도 있습니다. 기본적으로 대비는 1.0 입니다.
![]() | static QImage logo(":/qt_logo2.png"); QCanvasImage image = p->addImage(logo); p->setFillStyle("#d9f720"); for (int i = 0; i < 4; i++) { float x = 100 * (i % 2); float y = 100 * (i / 2); QRectF rect(x, y, 100, 100); p->setGlobalContrast(1.5 - i * 0.45); p->fillRect(rect); p->drawImage(image, rect); } |
void QCanvasPainter::setGlobalSaturate(float value)
글로벌 채도를 value 로 설정합니다. 이 채도는 렌더링된 모든 도형에 적용됩니다. 값이 0이면 채도가 비활성화되고 페인팅이 완전히 회색조로 표시됩니다. 채도를 높이려면 값을 1.0보다 크게 설정할 수도 있습니다. 기본적으로 채도는 1.0 입니다.
![]() | static QImage logo(":/qt_logo2.png"); QCanvasImage image = p->addImage(logo); p->setFillStyle("#d9f720"); for (int i = 0; i < 4; i++) { float x = 100 * (i % 2); float y = 100 * (i / 2); QRectF rect(x, y, 100, 100); p->setGlobalSaturate(1.5 - i * 0.5); p->fillRect(rect); p->drawImage(image, rect); } |
void QCanvasPainter::setLineCap(QCanvasPainter::LineCap cap)
스토크 줄 끝을 cap 으로 설정합니다. 기본 줄 캡은 QCanvasPainter::LineCap::Butt 입니다.
![]() | QCanvasPath path; path.moveTo(40, 60); path.lineTo(160, 60); p->setLineCap(QCanvasPainter::LineCap::Butt); p->stroke(path, -1); p->setLineCap(QCanvasPainter::LineCap::Square); p->translate(0, 40); p->stroke(path, -1); p->setLineCap(QCanvasPainter::LineCap::Round); p->translate(0, 40); p->stroke(path, -1); |
void QCanvasPainter::setLineJoin(QCanvasPainter::LineJoin join)
획의 줄 결합을 join 으로 설정합니다. 기본 줄 결합은 QCanvasPainter::LineJoin::Miter 입니다.
![]() | QCanvasPath path; path.moveTo(40, 20); path.lineTo(100, 80); path.lineTo(160, 40); path.lineTo(160, 70); p->setLineJoin(QCanvasPainter::LineJoin::Miter); p->stroke(path, -1); p->setLineJoin(QCanvasPainter::LineJoin::Bevel); p->translate(0, 50); p->stroke(path, -1); p->setLineJoin(QCanvasPainter::LineJoin::Round); p->translate(0, 50); p->stroke(path, -1); |
setMiterLimit()도 참조하세요 .
void QCanvasPainter::setLineWidth(float width)
획의 선 너비를 width (픽셀)로 설정합니다. 기본 선 너비는 1.0 입니다. 앤티앨리어싱을 활성화하면 단일 픽셀 아래의 선 너비가 자동으로 불투명도를 희미하게 하여 부드러운 출력을 만듭니다.
![]() | for (int i = 1; i < 10 ; i++) { int y = i * 20; p->setLineWidth(0.5 * i); p->beginPath(); p->moveTo(20, y); p->bezierCurveTo(80, y + 20, 120, y - 20, 180, y); p->stroke(); } |
stroke()도 참조하세요 .
void QCanvasPainter::setMiterLimit(float limit)
연귀 제한을 limit 로 설정합니다. 연귀 제한은 날카로운 모서리가 경사진 경우를 제어합니다. 모서리 길이가 이 제한보다 길어지면 QCanvasPainter::LineJoin::Bevel 이 대신 선 사이에 적용됩니다. 이는 QCanvasPainter::LineJoin::Miter 줄 합침에만 적용됩니다. 기본 제한은 10.0 입니다.
setLineJoin()도 참조하세요 .
void QCanvasPainter::setPathWinding(QCanvasPainter::PathWinding winding)
현재 하위 경로 winding 를 CounterClockWise (기본값) 또는 ClockWise 로 설정합니다. CounterClockWise 은 단색 하위 경로를 그리고 ClockWise 은 구멍을 그립니다.
![]() | p->beginPath(); p->roundRect(20, 20, 160, 160, 40); p->setPathWinding(QCanvasPainter::PathWinding::ClockWise); p->circle(140, 60, 20); p->rect(60, 120, 80, 30); p->fill(); p->stroke(); |
beginHoleSubPath() 및 beginSolidSubPath()도 참조하세요 .
void QCanvasPainter::setRenderHint(QCanvasPainter::RenderHint hint, bool on = true)
on 이 참이면 페인터에 주어진 렌더링 hint 을 설정하고, 그렇지 않으면 렌더링 힌트를 지웁니다.
setRenderHints() 및 renderHints()도 참조하세요 .
void QCanvasPainter::setRenderHints(QCanvasPainter::RenderHints hints, bool on = true)
on 이 참이면 페인터에 주어진 렌더링 hints 을 설정하고, 그렇지 않으면 렌더링 힌트를 지웁니다.
setRenderHint() 및 renderHints()도 참조하세요 .
void QCanvasPainter::setStrokeStyle(const QColor &color)
획 스타일을 단색 color 으로 설정합니다. 기본 획 스타일은 검은색 단색(0, 0, 0, 1)입니다.
![]() | p->setStrokeStyle(QColorConstants::Black); p->strokeRect(20, 20, 160, 160); p->setStrokeStyle(QColor(0, 65, 74)); p->strokeRect(40, 40, 120, 120); p->setStrokeStyle("#2CDE85"); p->strokeRect(60, 60, 80, 80); |
void QCanvasPainter::setStrokeStyle(const QCanvasBrush &brush)
획 스타일을 brush 으로 설정합니다. 기본 획 스타일은 검은색 단색(0, 0, 0, 1)입니다.
![]() | QCanvasLinearGradient g1(180, 20, 20, 180); g1.setStartColor(QColor(44, 222, 133)); g1.setEndColor(Qt::black); p->setStrokeStyle(g1); p->strokeRect(20, 20, 160, 160); g1.setEndColor(Qt::yellow); p->setStrokeStyle(g1); p->strokeRect(40, 40, 120, 120); |
이 함수는 오버로드된 함수입니다.
void QCanvasPainter::setTextAlign(QCanvasPainter::TextAlign align)
텍스트의 가로 맞춤을 align 으로 설정합니다. 기본 맞춤은 QCanvasPainter::TextAlign::Start 입니다.
![]() | QFont font("Titillium Web", 22); p->setFont(font); p->fillRect(100, 0, 1, 200); p->setTextAlign(QCanvasPainter::TextAlign::Left); p->fillText("Left", 100, 40); p->setTextAlign(QCanvasPainter::TextAlign::Center); p->fillText("Center", 100, 70); p->setTextAlign(QCanvasPainter::TextAlign::Right); p->fillText("Right", 100, 100); p->setTextAlign(QCanvasPainter::TextAlign::Start); p->fillText("Start", 100, 130); p->setTextAlign(QCanvasPainter::TextAlign::End); p->fillText("End", 100, 160); |
setTextBaseline()도 참조하세요 .
void QCanvasPainter::setTextAntialias(float antialias)
현재 텍스트 안티앨리어싱 양을 설정합니다. antialias 값은 일반 안티앨리어싱에 곱하기 값으로, 0.0 은 안티앨리어싱을 비활성화하고 2.0은 두 배로 늘린다는 의미입니다. 기본값은 1.0입니다.
참고: 사용된 텍스트 안티앨리어싱 기술(SDF)로 인해 최대 안티앨리어싱 양은 매우 제한적이며 글꼴 크기가 작을 때 영향을 덜 받습니다.
![]() | QFont font("Titillium Web", 20); p->setFont(font); p->setTextAntialias(1.0); p->fillText("Antialiasing: 1.0", 100, 25); p->setTextAntialias(2.0); p->fillText("Antialiasing: 2.0", 100, 75); p->setTextAntialias(3.0); p->fillText("Antialiasing: 3.0", 100, 125); p->setTextAntialias(4.0); p->fillText("Antialiasing: 4.0", 100, 175); |
void QCanvasPainter::setTextBaseline(QCanvasPainter::TextBaseline baseline)
텍스트의 세로 맞춤(기준선)을 baseline 으로 설정합니다. 기본 맞춤은 QCanvasPainter::TextBaseline::Alphabetic 입니다.
![]() | QFont font("Titillium Web", 16); p->setFont(font); p->fillRect(0, 60, 200, 1); p->fillRect(0, 140, 200, 1); p->setTextBaseline(QCanvasPainter::TextBaseline::Bottom); p->fillText("Bottom", 40, 60); p->setTextBaseline(QCanvasPainter::TextBaseline::Middle); p->fillText("Middle", 100, 60); p->setTextBaseline(QCanvasPainter::TextBaseline::Top); p->fillText("Top", 160, 60); p->setTextBaseline(QCanvasPainter::TextBaseline::Alphabetic); p->fillText("Alphabetic", 50, 140); p->setTextBaseline(QCanvasPainter::TextBaseline::Hanging); p->fillText("Hanging", 150, 140); |
setTextAlign()도 참조하세요 .
void QCanvasPainter::setTextDirection(QCanvasPainter::TextDirection direction)
텍스트 방향을 direction 으로 설정합니다. 기본 방향은 QCanvasPainter::TextDirection::Inherit 입니다.
void QCanvasPainter::setTextLineHeight(float height)
줄 높이 조정을 픽셀 단위로 설정하여 줄 바꿈 텍스트의 경우 height 로 설정합니다. 기본 줄 높이는 0 입니다.
![]() | QRectF r1(40, 5, 120, 60); QRectF r2(40, 70, 120, 60); QRectF r3(40, 135, 120, 60); p->strokeRect(r1); p->strokeRect(r2); p->strokeRect(r3); p->setTextLineHeight(-10); p->fillText("Text with line height: -10", r1); p->setTextLineHeight(0); p->fillText("Text with line height: 0", r2); p->setTextLineHeight(10); p->fillText("Text with line height: 10", r3); |
void QCanvasPainter::setTextWrapMode(QCanvasPainter::WrapMode wrapMode)
텍스트 줄 바꿈 모드를 wrapMode 으로 설정합니다. 기본 줄 바꿈 모드는 QCanvasPainter::WrapMode::NoWrap 입니다.
![]() | QRectF r1(50, 5, 100, 60); QRectF r2(50, 70, 100, 60); QRectF r3(50, 135, 100, 60); p->strokeRect(r1); p->strokeRect(r2); p->strokeRect(r3); QString s("This is a long string."); p->setTextWrapMode(QCanvasPainter::WrapMode::NoWrap); p->fillText(s, r1); p->setTextWrapMode(QCanvasPainter::WrapMode::Wrap); p->fillText(s, r2); p->setTextWrapMode(QCanvasPainter::WrapMode::WrapAnywhere); p->fillText(s, r3); |
void QCanvasPainter::setTransform(const QTransform &transform)
현재 트랜스폼을 재설정하고 transform 대신 사용합니다.
![]() | p->beginPath(); p->roundRect(80, 20, 40, 40, 10); p->fill(); p->stroke(); QTransform t; t.translate(100, 20); t.rotate(45); t.scale(2.0, 2.0); p->setTransform(t); p->beginPath(); p->roundRect(20, 20, 40, 40, 10); p->fill(); p->stroke(); |
transform()도 참조하세요 .
void QCanvasPainter::skew(float angleX, float angleY = 0.0f)
현재 좌표계를 X축을 따라 angleX 으로, Y축을 따라 angleY 으로 기울입니다. 각도는 라디안 단위로 지정됩니다.
![]() | QRectF rect(40, 70, 120, 60); p->translate(rect.center()); p->skew(-0.6); p->translate(-rect.center()); p->beginPath(); p->roundRect(rect, 10); p->fill(); p->stroke(); p->setFillStyle(QColorConstants::Black); p->fillText("Cute!", rect); |
void QCanvasPainter::stroke()
현재 획 스타일로 현재 경로를 획합니다.
![]() | p->beginPath(); p->rect(20, 20, 40, 160); p->rect(140, 20, 40, 160); p->circle(100, 100, 60); p->stroke(); |
setStrokeStyle()도 참조하세요 .
void QCanvasPainter::stroke(const QCanvasPath &path, int pathGroup = 0)
현재 획 스타일로 path 을 pathGroup 에 속하도록 획을 긋습니다. 경로에 더 많은 명령이 포함되어 있고 대부분 정적인 경우 QCanvasPath 을 통해 그리는 것이 가장 좋습니다. 기본적으로 pathGroup 은 0 이므로 첫 번째 그룹을 사용합니다. pathGroup 가 -1 인 경우 경로가 GPU 측에 캐시되지 않습니다. 경로 캐시 그룹 사용에 대한 자세한 내용은 QCanvasPath 문서를 참조하세요. 이 메서드 앞에 beginPath()를 호출할 필요는 없습니다.
![]() | // m_path is QCanvasPath if (m_path.isEmpty()) { for (int i = 0; i < 16; i++) { int h = 100 + 60 * sin(i); m_path.rect(22 + i * 10, 180 - h, 6, h); } } p->stroke(m_path); |
이 함수는 오버로드된 함수입니다.
setStrokeStyle()도 참조하세요 .
void QCanvasPainter::strokeRect(float x, float y, float width, float height)
지정된 위치( x, y)에 width, height 크기의 스톡 직사각형을 그립니다.
참고: 이것은 편의를 위해 제공됩니다. 하나의 직사각형 이상을 스트로크할 때는 rect()를 사용하는 것이 좋습니다.
![]() | p->strokeRect(20, 20, 160, 160); // The above code does same as: // p->beginPath(); // p->rect(20, 20, 160, 160); // p->stroke(); |
void QCanvasPainter::strokeRect(const QRectF &rect)
rect 에 스토킹된 사각형을 그립니다. 이것은 QRectF 을 사용하는 오버로드된 메서드입니다.
참고: 편의를 위해 제공된 것입니다. 하나의 직사각형 이상을 스트로크할 때는 rect()를 사용하는 것이 좋습니다.
이 함수는 과부하된 함수입니다.
QRectF QCanvasPainter::textBoundingBox(const QString &text, float x, float y, float maxWidth = -1)
text 문자열의 바운딩 박스를 (x, y)에서 측정합니다. 여러 줄 텍스트를 측정하려면 선택 사항인 maxWidth 매개변수를 원하는 행 너비(픽셀)로 설정합니다. [xmin, ymin, 너비, 높이] 값과 함께 QRectF 를 반환합니다. 측정값은 로컬 좌표 공간에서 반환됩니다.
![]() | QString s("Built with Qt"); QPointF pos1(20, 20); QRectF box1 = p->textBoundingBox(s, pos1); p->strokeRect(box1); p->fillText(s, pos1); p->setTextWrapMode(QCanvasPainter::WrapMode::WordWrap); p->setTextAlign(QCanvasPainter::TextAlign::Center); QPointF pos2(100, 80); QRectF box2 = p->textBoundingBox(s, pos2, 100); p->strokeRect(box2); p->fillText(s, pos2, 100); |
QRectF QCanvasPainter::textBoundingBox(const QString &text, const QRectF &rect)
rect 에서 text 문자열의 바운딩 박스를 측정합니다. QRectF 를 [xmin, ymin, 너비, 높이] 값과 함께 반환합니다. 측정값은 로컬 좌표 공간에서 반환됩니다.
이 함수는 오버로드된 함수입니다.
QRectF QCanvasPainter::textBoundingBox(const QString &text, QPointF point, float maxWidth = -1)
point 에서 text 문자열의 바운딩 박스를 측정합니다. 여러 줄 텍스트를 측정하려면 선택 사항인 maxWidth 매개변수를 원하는 행 너비(픽셀)로 설정합니다. [xmin, ymin, 너비, 높이] 값과 함께 QRectF 를 반환합니다. 측정된 값은 로컬 좌표 공간에서 반환됩니다.
이 함수는 오버로드된 함수입니다.
void QCanvasPainter::transform(const QTransform &transform)
현재 좌표계에 지정된 transform 을 곱합니다.
![]() | QTransform t; t.translate(100, 100); t.rotate(36); t.translate(-100, -100); for (int i = 0; i < 10; i++) { p->transform(t); p->beginPath(); p->roundRect(80, 15, 40, 20, 10); p->fill(); p->stroke(); } |
setTransform()도 참조하세요 .
void QCanvasPainter::translate(float x, float y)
현재 좌표계를 x 및 y 으로 변환합니다.
![]() | auto paintRect = [p]() { p->beginPath(); p->roundRect(20, 20, 160, 60, 10); p->fill(); p->stroke(); }; paintRect(); p->translate(0, 100); paintRect(); |
void QCanvasPainter::translate(QPointF point)
현재 좌표계를 point 으로 변환합니다.
이 함수는 과부하가 걸린 함수입니다.
© 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.
























































