이 페이지에서

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 }
(since 6.12) enum class FillRule { NonZero, EvenOdd }
enum class ImageFlag { GenerateMipmaps, RepeatX, RepeatY, Repeat, FlipY, …, Nearest }
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 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(qreal centerX, qreal centerY, qreal radius, qreal a0, qreal a1, QCanvasPainter::PathWinding direction = PathWinding::ClockWise, QCanvasPainter::PathConnection connection = PathConnection::Connected)
void arc(QPointF centerPoint, qreal radius, qreal a0, qreal a1, QCanvasPainter::PathWinding direction = PathWinding::ClockWise, QCanvasPainter::PathConnection connection = PathConnection::Connected)
void arcTo(qreal x1, qreal y1, qreal x2, qreal y2, qreal radius)
void arcTo(QPointF controlPoint1, QPointF controlPoint2, qreal radius)
void beginHoleSubPath()
void beginPath()
void beginSolidSubPath()
void bezierCurveTo(qreal cp1X, qreal cp1Y, qreal cp2X, qreal cp2Y, qreal x, qreal y)
void bezierCurveTo(QPointF controlPoint1, QPointF controlPoint2, QPointF endPoint)
void circle(qreal centerX, qreal centerY, qreal radius)
void circle(QPointF centerPoint, qreal radius)
void cleanupResources()
void clearRect(qreal x, qreal y, qreal width, qreal height)
void clearRect(const QRectF &rect)
void closePath()
QCanvasOffscreenCanvas createCanvas(QSize pixelSize, int sampleCount = 1, QCanvasOffscreenCanvas::Flags flags = {})
void destroyCanvas(QCanvasOffscreenCanvas &canvas)
void drawBoxShadow(const QCanvasBoxShadow &shadow)
void drawImage(const QCanvasImage &image, qreal x, qreal 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, qreal x, qreal y, qreal width, qreal height)
void ellipse(qreal centerX, qreal centerY, qreal radiusX, qreal radiusY)
void ellipse(const QRectF &rect)
void ellipse(QPointF centerPoint, qreal radiusX, qreal radiusY)
void fill()
(since 6.12) void fill(QCanvasPainter::FillRule fillRule)
void fill(const QCanvasPath &path, int pathGroup = -1)
(since 6.12) void fill(const QCanvasPath &path, QCanvasPainter::FillRule fillRule, int pathGroup = -1)
void fillRect(qreal x, qreal y, qreal width, qreal height)
void fillRect(const QRectF &rect)
void fillText(const QString &text, qreal x, qreal y, qreal maxWidth = 0)
void fillText(const QString &text, const QRectF &rect)
void fillText(const QString &text, QPointF point, qreal maxWidth = 0)
QTransform getTransform() const
void lineTo(qreal x, qreal y)
void lineTo(QPointF point)
void moveTo(qreal x, qreal y)
void moveTo(QPointF point)
void quadraticCurveTo(qreal cpX, qreal cpY, qreal x, qreal y)
void quadraticCurveTo(QPointF controlPoint, QPointF endPoint)
void rect(qreal x, qreal y, qreal width, qreal height)
void rect(const QRectF &rect)
void removeImage(const QCanvasImage &image)
void removePathGroup(int pathGroup)
void reset()
void resetClipping()
void resetTransform()
void restore()
void rotate(qreal angle)
void roundRect(qreal x, qreal y, qreal width, qreal height, qreal radius)
void roundRect(const QRectF &rect, qreal radius)
void roundRect(const QRectF &rect, qreal radiusTopLeft, qreal radiusTopRight, qreal radiusBottomRight, qreal radiusBottomLeft)
void roundRect(qreal x, qreal y, qreal width, qreal height, qreal radiusTopLeft, qreal radiusTopRight, qreal radiusBottomRight, qreal radiusBottomLeft)
void save()
void scale(qreal scale)
void scale(qreal scaleX, qreal scaleY)
void setAntialias(qreal antialias)
void setClipRect(qreal x, qreal y, qreal width, qreal height)
void setClipRect(const QRectF &rect)
(since 6.12) void setFillRule(QCanvasPainter::FillRule fillRule)
void setFillStyle(QColor color)
void setFillStyle(const QCanvasBrush &brush)
void setFont(const QFont &font)
void setGlobalAlpha(qreal alpha)
void setGlobalBrightness(qreal value)
void setGlobalCompositeOperation(QCanvasPainter::CompositeOperation operation)
void setGlobalContrast(qreal value)
void setGlobalSaturation(qreal value)
void setHighQualityStroking(bool enabled)
void setLineCap(QCanvasPainter::LineCap cap)
void setLineJoin(QCanvasPainter::LineJoin join)
void setLineWidth(qreal width)
void setMiterLimit(qreal limit)
void setPathWinding(QCanvasPainter::PathWinding winding)
void setStrokeStyle(QColor color)
void setStrokeStyle(const QCanvasBrush &brush)
void setTextAlign(QCanvasPainter::TextAlign align)
void setTextAntialias(qreal antialias)
void setTextBaseline(QCanvasPainter::TextBaseline baseline)
void setTextDirection(QCanvasPainter::TextDirection direction)
void setTextLineHeight(qreal height)
void setTextWrapMode(QCanvasPainter::WrapMode wrapMode)
void setTransform(const QTransform &transform)
void setWindingEnforce(bool enabled)
void skew(qreal angleX, qreal angleY = 0.0)
void stroke()
void stroke(const QCanvasPath &path, int pathGroup = -1)
void strokeRect(qreal x, qreal y, qreal width, qreal height)
void strokeRect(const QRectF &rect)
QRectF textBoundingBox(const QString &text, qreal x, qreal y, qreal maxWidth = 0) const
QRectF textBoundingBox(const QString &text, const QRectF &rect) const
QRectF textBoundingBox(const QString &text, QPointF point, qreal maxWidth = 0) const
void transform(const QTransform &transform)
void translate(qreal x, qreal y)
void translate(QPointF point)

상세 설명

Qt Canvas Painter(QCanvasPainter)는 하드웨어 가속(GPU) 페인팅에 최적화된 페인팅 API를 제공합니다. 이 API는 HTML Canvas 2D Context 사양을 충실히 따르며, Qt C++로 이식되었습니다. 또한 QPainter 의 영향을 받았으나, 더 간결한 API를 갖추고 있습니다.

다음은 QCanvasPainter를 사용하여 둥근 버튼을 만드는 간단한 예제입니다.

“CLICK!”이라고 적힌 노란색 둥근 버튼에 부드러운 그림자가 드리워져 있다
QRectF rect(40, 70, 120, 60);
QRectF shadowRect = rect.translated(2, 4);
// Paint shadow
QCanvasBoxShadow shadow(shadowRect);
shadow.setRadius(30);
shadow.setBlur(15);
shadow.setColor("#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);

다음은 간단한 그래프를 그리는 또 다른 예제입니다.

흰색 축이 있는 어두운 격자 위에 녹색에서 빨간색으로 변하는 음영 처리된 S자 곡선
// Paint grid
QCanvasGridPattern grid(0, 0, 10, 10);
grid.setLineColor("#404040");
grid.setBackgroundColor("#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 Canvas 2D 컨텍스트(https://html.spec.whatwg.org/multipage/canvas.html#2dcontext)를 따릅니다. 이로 인해 많은 개발자가 API를 익숙하게 사용할 수 있으며, 기존 캔버스 코드를 쉽게 재사용할 수 있습니다. 하지만 이 라이브러리의 목표는 HTML 캔버스와 100% 호환되는 것이 아닙니다. QCanvasPainter는 기능을 단순화하고, QRhi 의 하드웨어 가속 그래픽 API에서 더 높은 성능을 발휘하며, 현대적인 UI 요구 사항을 더 잘 충족하기 위해 일부 기능을 생략했습니다. 이러한 이유로 QCanvasPainter는 HTML Canvas 2D 컨텍스트에 비해 추가적인 기능도 갖추고 있습니다.

다음은 HTML 캔버스와 비교했을 때, 적어도 현재로서는 지원되지 않는 기능 중 일부입니다:

  • 클리핑: 모든 클리핑은 (변환된) 직사각형이며, 경로 도형에 대한 클리핑은 지원되지 않습니다.
  • 점선: 획은 항상 실선이며, 점선 또는 점점선 획 패턴은 지원되지 않습니다.
  • 경로 테스트: isPointInPath() 또는 isPointInStroke() 메서드가 없습니다.
  • 텍스트 획: 텍스트의 윤곽선 획을 지원하지 않습니다.
  • 필터: Canvas SVG 필터 효과가 지원되지 않습니다.
  • 합성 모드: 합성 모드의 수는 3개로 제한되며, 추가 버퍼로 렌더링하지 않고도 지원될 수 있습니다.
  • 그림자: 내장된 그림자 메서드는 지원되지 않습니다.

반면, QCanvasPainter가 HTML Canvas에 비해 제공하는 추가 기능 중 일부는 다음과 같습니다.

  • 경로 그룹: QCanvasPainter는 정적 경로에 그리기를 수행하고, GPU 활용을 최적화하기 위해 이러한 경로를 그룹으로 캐싱할 수 있습니다.
  • 조정 가능한 앤티앨리어싱: 경로 정점 앤티앨리어싱 및 SDF 텍스트 렌더링 덕분에, 더 부드러운 그리기를 위해 앤티앨리어싱의 픽셀 수를 자유롭게 조정할 수 있습니다.
  • 박스 그라데이션: 선형, 방사형 및 원뿔형 그라데이션 외에도 QCanvasPainter는 둥근 사각형 박스 그라데이션을 지원합니다.
  • 박스 섀도우: QCanvasPainter는 CSS box-shadow 유형의 브러시도 지원합니다. 렌더링은 Qt Quick RectangularShadow 와 유사한 SDF 방식을 사용하여 매우 뛰어난 성능을 발휘합니다.
  • 격자 패턴: QCanvasPainter는 동적 격자 및 막대 패턴 스타일을 위해 QCanvasGridPattern 를 지원합니다.
  • 사용자 정의 브러시: QCanvasPainter는 사용자 정의 버텍스 및 프래그먼트 셰이더(QCanvasCustomBrush)를 사용하여 채우기 및 선 그리기를 할 수 있게 해줍니다. 이러한 사용자 정의 브러시는 텍스트에도 사용할 수 있습니다.
  • 텍스트 줄 바꿈: QCanvasPainter는 다양한 줄 바꿈 모드를 통해 텍스트를 여러 줄로 자동 줄 바꿈하는 기능을 지원합니다.
  • 색상 효과: globalAlpha 외에도 QCanvasPainter는 전체적인 밝기, 대비 및 채도를 지원합니다.
  • 색조 이미지: QCanvasPainter는 칠해진 이미지와 이미지 패턴에 대해 색조 색상 지원을 추가합니다.

QCanvasPainter는 아키텍처에 구애받지 않으며, Qt Quick 및 Qt Widgets 애플리케이션 모두에서 사용할 수 있습니다. 사실, 이 두 가지 중 어느 것도 없이도 QWindow 및 QRhi 만으로도 사용할 수 있습니다. QCanvasPainter를 활용하려면 애플리케이션의 아키텍처에 따라 다음 클래스 중 하나를 통해 사용하십시오:

와인딩 규칙

QCanvasPainter는 기본적으로 NonZero ({Qt::WindingFill}) fillrule을 사용합니다. 경로 점의 방향에 따라 채우기를 선택하려면 setWindingEnforce(false)를 호출하여 와인딩 강제 적용을 비활성화하십시오.

상단 부근에 채워지지 않은 작은 삼각형 구멍이 있는 녹색의 아래쪽을 향한 삼각형
p->setWindingEnforce(false);
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 Canvas Painter는 다음 3가지 합성 연산을 지원합니다:

상수값설명
QCanvasPainter::CompositeOperation::SourceOver0기본값입니다. 기존 콘텐츠 위에 새로운 도형을 그립니다.
QCanvasPainter::CompositeOperation::SourceAtop1새로운 도형은 기존 콘텐츠와 겹치는 부분에만 그려집니다.
QCanvasPainter::CompositeOperation::DestinationOut2기존 콘텐츠는 새 도형과 겹치지 않는 부분에서는 그대로 유지됩니다.

setGlobalCompositeOperation()도 참조하십시오 .

[since 6.12] enum class QCanvasPainter::FillRule

이 열거형은 경로가 어떻게 채워지는지를 지정합니다.

상수값설명
QCanvasPainter::FillRule::NonZero0경로는 0이 아닌 와인딩 규칙을 사용하여 채워집니다. 이 규칙을 사용하면 다음 방법을 통해 점이 도형 내부에 있는지 여부를 판단합니다. 점에서 도형 외부의 한 지점까지 수평선을 그립니다. 각 교차점에서 선의 방향이 위쪽인지 아래쪽인지 판단합니다. 각 교차점에서의 선 방향을 합산하여 와인딩 수를 결정합니다. 이 수치가 0이 아니면 해당 점은 도형 내부에 있는 것입니다. 이 채우기 모드는 대부분의 경우 닫힌 도형들의 교집합으로 간주될 수도 있습니다. 이 모드는 기본값입니다.
QCanvasPainter::FillRule::EvenOdd1경로는 홀수-짝수 채우기 규칙을 사용하여 채워집니다. 이 규칙에서는 다음 방법을 사용하여 점이 도형 내부에 있는지 여부를 판단합니다. 점에서 도형 바깥쪽 지점까지 수평선을 그리고, 교차점의 수를 세어 봅니다. 교차점의 수가 홀수라면, 해당 점은 도형 내부에 있는 것입니다.

이 열거형은 Qt 6.12에서 도입되었습니다.

fill()도 참조하십시오 .

enum class QCanvasPainter::ImageFlag
flags QCanvasPainter::ImageFlags

이 열거형은 이미지와 관련된 플래그를 지정합니다. 플래그를 설정하려면 addImage()와 함께 사용하십시오.

상수값설명
QCanvasPainter::ImageFlag::GenerateMipmaps1 << 0이미지에 대한 밉맵을 생성하려면 이 값을 설정하십시오. 원본 크기보다 작게 축소된 이미지의 경우 더 부드러운 출력을 원할 때 밉맵을 사용해야 합니다.
QCanvasPainter::ImageFlag::RepeatX1 << 1이미지 패턴과 함께 사용하여 X 좌표 방향으로 이미지를 반복합니다.
QCanvasPainter::ImageFlag::RepeatY1 << 2이미지 패턴과 함께 사용하여 Y 좌표 방향으로 이미지를 반복합니다.
QCanvasPainter::ImageFlag::RepeatRepeatX | RepeatY이미지 패턴과 함께 사용하여 양쪽 좌표축에서 이미지를 반복합니다.
QCanvasPainter::ImageFlag::FlipY1 << 3렌더링 시 이미지를 Y 방향으로 뒤집습니다(반전).
QCanvasPainter::ImageFlag::Premultiplied1 << 4이미지 데이터에는 사전 곱해진 알파 값이 포함되어 있습니다.
QCanvasPainter::ImageFlag::Nearest1 << 5이미지 보간 방식은 선형(Linear)이 아닌 최인접(Nearest)입니다.

ImageFlags 유형은 QFlags<ImageFlag>에 대한 typedef입니다. 이 유형은 ImageFlag 값들의 OR 조합을 저장합니다.

enum class QCanvasPainter::LineCap

LineCap은 선의 끝부분(캡)이 어떻게 그려질지 정의하는 데 사용됩니다.

상수값설명
QCanvasPainter::LineCap::Butt0(기본값) 선의 끝점을 덮지 않는 사각형 선 끝.
QCanvasPainter::LineCap::Round1둥근 선 끝.
QCanvasPainter::LineCap::Square2끝점을 덮고 선 너비의 절반만큼 끝점 너머로 뻗어 나가는 사각형 선 끝단.

setLineCap()도 참조하십시오 .

enum class QCanvasPainter::LineJoin

LineJoin은 서로 연결된 두 선 사이의 연결 부분을 어떻게 그릴지 정의하는 데 사용됩니다.

상수값설명
QCanvasPainter::LineJoin::Round0두 선 사이의 원호 부분이 채워집니다.
QCanvasPainter::LineJoin::Bevel1두 선 사이의 삼각형 모양의 홈이 채워집니다.
QCanvasPainter::LineJoin::Miter2(기본값) 두 선의 바깥쪽 가장자리가 각도를 이루며 연장되고, 이 영역이 채워집니다.

setLineJoin() 및 setMiterLimit()도 참조하십시오 .

enum class QCanvasPainter::PathConnection

일부 그리기 방법에서는 PathConnection을 사용하여 새 경로가 이전 경로의 마지막 점과 연결되어야 하는지 여부를 지정합니다.

상수값설명
QCanvasPainter::PathConnection::NotConnected0이전 경로의 마지막 점에서 현재 경로의 첫 번째 점으로 선이 그려지지 않습니다.
QCanvasPainter::PathConnection::Connected1이전 경로의 마지막 지점과 현재 경로의 첫 번째 지점이 연결됩니다.

arc()도 참조하십시오 .

enum class QCanvasPainter::PathWinding

PathWinding은 경로 그리기 방향을 지정하는 데 사용됩니다. 이 방향은 하위 경로가 경로 내에서 채워진 부분인지, 아니면 구멍인지 판단하는 데 사용됩니다.

상수값설명
QCanvasPainter::PathWinding::CounterClockWise0(기본값) 실형 도형의 경우 시계 반대 방향 감기.
QCanvasPainter::PathWinding::ClockWise1구멍의 경우 시계 방향 감기.

setPathWinding()도 참조하십시오 .

enum class QCanvasPainter::TextAlign

TextAlign은 텍스트의 수평 정렬 방식을 정의하는 데 사용됩니다.

상수값설명
QCanvasPainter::TextAlign::Left0텍스트의 왼쪽 가장자리를 수평으로 지정된 위치에 정렬합니다.
QCanvasPainter::TextAlign::Right1텍스트의 오른쪽 가장자리를 수평으로 지정된 위치에 맞춥니다.
QCanvasPainter::TextAlign::Center2텍스트의 중앙을 수평으로 지정된 위치에 정렬합니다.
QCanvasPainter::TextAlign::Start3(기본값) 텍스트는 줄의 정상적인 시작 위치에 정렬됩니다(왼쪽에서 오른쪽으로 읽는 로케일의 경우 왼쪽 정렬, 오른쪽에서 왼쪽으로 읽는 로케일의 경우 오른쪽 정렬).
QCanvasPainter::TextAlign::End4텍스트는 줄의 일반적인 끝 부분에 정렬됩니다(왼쪽에서 오른쪽으로 읽는 로캘의 경우 오른쪽 정렬, 오른쪽에서 왼쪽으로 읽는 로캘의 경우 왼쪽 정렬).

setTextAlign(), setTextDirection(), fillText()도 참조하십시오 .

enum class QCanvasPainter::TextBaseline

TextBaseline은 텍스트의 수직 정렬(베이스라인) 방식을 정의하는 데 사용됩니다.

상수값설명
QCanvasPainter::TextBaseline::Top0텍스트의 상단을 지정된 위치에 수직으로 정렬합니다.
QCanvasPainter::TextBaseline::Hanging1텍스트의 매달린 기준선을 수직으로 지정된 위치에 정렬합니다.
QCanvasPainter::TextBaseline::Middle2텍스트의 중간을 지정된 위치에 수직으로 정렬합니다.
QCanvasPainter::TextBaseline::Alphabetic3(기본값) 텍스트의 기준선을 지정된 위치에 수직으로 정렬합니다.
QCanvasPainter::TextBaseline::Bottom4텍스트의 하단을 지정된 위치에 수직으로 정렬합니다.

setTextBaseline() 및 fillText()도 참조하십시오 .

enum class QCanvasPainter::TextDirection

TextDirection은 텍스트의 수평 정렬 방식을 정의하는 데 사용됩니다.

상수값설명
QCanvasPainter::TextDirection::LeftToRight0텍스트 방향은 왼쪽에서 오른쪽으로입니다.
QCanvasPainter::TextDirection::RightToLeft1텍스트 방향이 오른쪽에서 왼쪽입니다.
QCanvasPainter::TextDirection::Inherit2(기본값) 텍스트 방향은 QGuiApplication layoutDirection에서 상속됩니다. https://doc.qt.io/qt-6/qguiapplication.html#layoutDirection-prop를 참조하십시오.
QCanvasPainter::TextDirection::Auto3텍스트 방향은 텍스트 문자열을 기반으로 자동으로 감지됩니다. QString::isRightToLeft()를 참조하십시오.

참고: 텍스트 분석이필요하므로 다른 옵션보다 처리 속도가 느릴 수 있습니다.

setTextDirection(), setTextAlign(), fillText()도 참조하십시오 .

enum class QCanvasPainter::WrapMode

WrapMode는 텍스트가 여러 줄로 어떻게 줄바꿈되는지를 정의하는 데 사용됩니다.

상수값설명
QCanvasPainter::WrapMode::NoWrap0(기본값) 줄 바꿈이 수행되지 않습니다. 텍스트에 줄 바꿈 문자가 충분하지 않은 경우, contentWidth가 설정된 너비를 초과하게 됩니다.
QCanvasPainter::WrapMode::Wrap1가능한 경우, 줄 바꿈은 단어 경계에서 이루어지며, 그렇지 않은 경우 단어 중간이라도 해당 줄의 적절한 지점에서 이루어집니다.
QCanvasPainter::WrapMode::WordWrap2단어 경계에서만 줄 바꿈이 수행됩니다. 단어가 너무 길면 콘텐츠 너비가 설정된 너비를 초과하게 됩니다.
QCanvasPainter::WrapMode::WrapAnywhere3단어 중간이라도 줄의 어느 지점에서든 줄 바꿈이 수행됩니다.

setTextWrapMode() 및 fillText()도 참조하십시오 .

멤버 함수 문서

QCanvasPainter::QCanvasPainter()

페인터를 생성합니다.

[noexcept] QCanvasPainter::~QCanvasPainter()

화가에게 치명적인 타격을 입힌다.

qsizetype QCanvasPainter::activeImageCount() const

이 QCanvasPainter 에 등록된 활성 QCanvasImage 객체의 개수를 반환합니다. 여기에는 gradients 를 위해 내부적으로 생성된 이미지들도 포함됩니다.

QCanvasImage QCanvasOffscreenCanvas 인스턴스를 등록하여 생성된 객체나 외부에서 관리되는 텍스처는 이 함수에서 고려되지 않습니다.

activeImageMemoryUsage(), addImage(), removeImage()도 참조하십시오 .

qsizetype QCanvasPainter::activeImageMemoryUsage() const

QImage 을 인수로 받는 addImage() 오버로드에 의해 생성된, 이 페인터에 대한 모든 활성 QCanvasImage 인스턴스의 이미지(픽셀) 데이터가 사용하는 메모리 양을 킬로바이트 단위로 대략적으로 반환합니다. 또한 gradients 을 위해 내부적으로 생성된 이미지의 데이터도 포함됩니다.

QCanvasPainter addImage()가 반환된 후에는 CPU 측의 데이터 사본을 유지하지 않습니다. 따라서 이 함수의 결과는 텍스처에 사용되는 GPU 메모리의 근사치입니다. QImage

참고: 이 값은 이미지 형식과 크기를 기반으로 한 추정치에 불과합니다. Qt는 GPU 측 메모리에서 텍스처 데이터가 어떻게 저장되고 배치되는지에 대한 정보를 가지고 있지 않습니다.

다른 addImage() 오버로드들을 통해 등록된 오프스크린 캔버스와 외부에서 관리되는 텍스처는 이 함수에서 고려되지 않습니다.

유효한 모든 QCanvasImage 에 대해, sizeInBytes()를 호출하여 개별 크기를 바이트 단위로 항상 조회할 수 있습니다. 이 함수는 QCanvasImage 가 QCanvasOffscreenCanvas 또는 QRhiTexture 에서 생성된 경우에도 유효한 결과를 반환하지만, 밉맵(mipmap)이나 멀티샘플(multisample) 데이터는 고려하지 않습니다.

activeImageCount(), addImage(), removeImage()도 참조하십시오 .

QCanvasImage QCanvasPainter::addImage(const QImage &image, QCanvasPainter::ImageFlags flags = {})

image 를 추가하며, flags 를 페인터가 텍스처로 사용할 수 있게 합니다. 텍스처 ID 및 이미지에 대한 기타 정보가 포함된 QCanvasImage 를 반환합니다. 반환된 QCanvasImage 는 drawImage 및 QCanvasImagePattern 와 함께 사용할 수 있습니다. 이 메서드를 호출한 후에는 image QImage 를 메모리에 계속 보관할 필요가 없습니다.

동일한 image 를 사용하여 호출하는 것은 캐시 히트가 예상되므로 부하가 적은 작업입니다.

최적화 시 addImage()를 한 번만 호출하도록 주의해야 합니다. 애플리케이션 설계에 따라 이 방법만으로는 충분하지 않을 수 있습니다. 예를 들어, 위젯을 새로운 최상위 레벨로 이동하여 페인터가 내부적으로 새로운 QRhi 와 연결되는 등, 기본 그래픽 리소스가 손실된 경우, image 의 네이티브 그래픽 텍스처를 재 생성하기 위해서는 이 함수를 호출하는 것이 필수적입니다.

drawImage() 및 removeImage()도 참조하십시오 .

QCanvasImage QCanvasPainter::addImage(QRhiTexture *texture, QCanvasPainter::ImageFlags flags = {})

texture 를 추가하며, flags 를 페인터가 텍스처로 사용할 수 있도록 제공합니다. 반환된 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 은 기본적으로 NonZero (Qt::WindingFill) fillrule을 사용하지만, QPainterPath 은 기본적으로 Qt::OddEvenFill 을 사용합니다. 따라서 필요한 경우, 예를 들어 setFillRule()을 사용하여 fillRule을 변경해야 합니다.

참고: 이 메서드는 주로 QPainter 및 QPainterPath 와의 호환성을 위해 제공됩니다. QCanvasPainter 메서드를 사용하여 경로를 직접 그리는 것에 비해 성능이 향상되지는 않습니다.

void QCanvasPainter::addPath(const QCanvasPath &path, const QTransform &transform = QTransform())

path 를 현재 경로에 추가하며, 선택적으로 transform 를 사용하여 경로 지점을 변경할 수 있습니다. transform 가 지정되지 않았거나(또는 단위 행렬인 경우), 이 연산은 경로 데이터를 재사용하므로 매우 빠르게 수행됩니다.

두 개의 똑같은 녹색 원으로, 두 번째 원은 첫 번째 원을 이동시킨 복사본이다
// 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()을 초과하지 않습니다. 경로가 현재 경로 위치에서 이어지지 않아야 하는 경우, 먼저 moveTo()를 호출하십시오(예: path.positionAt(start - 1)).

같은 파형의 더 짧은 구간 위에, 그 아래에 복사된 사인파
// 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(qreal centerX, qreal centerY, qreal radius, qreal a0, qreal a1, QCanvasPainter::PathWinding direction = PathWinding::ClockWise, QCanvasPainter::PathConnection connection = PathConnection::Connected)

새로운 원호 모양의 하위 경로를 생성합니다. 원호의 중심은 centerX, centerY 에 위치하며, 반지름은 radius 입니다. 원호는 각도 a0 에서 a1 까지 그려지며, direction (ClockWise 또는 CounterClockWise) 방향으로 스윕됩니다. connection 가 NotConnected 일 경우, 원호는 이전 경로 위치에서 원호의 시작점까지 선을 추가하지 않습니다. 각도는 라디안 단위로 지정됩니다.

원의 4분의 3을 채우는 녹색 파이 모양으로, 나머지 4분의 1은 비어 있다
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, qreal radius, qreal a0, qreal 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(qreal x1, qreal y1, qreal x2, qreal y2, qreal 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, qreal 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(qreal cp1X, qreal cp1Y, qreal cp2X, qreal cp2Y, qreal x, qreal y)

경로의 마지막 점에서 두 개의 제어점(cp1X, cp1Y 및 cp2X, cp2Y)을 거쳐 지정된 점(x, y)까지 3차 베지어 세그먼트를 추가합니다.

매끄러운 S자형 3차 베지에 곡선
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 까지 3차 베지어 세그먼트를 추가합니다.

이 함수는 오버로드된 함수입니다.

void QCanvasPainter::circle(qreal centerX, qreal centerY, qreal radius)

( centerX, centerY)을 중심으로, 반지름 radius 인 새로운 원형 서브 경로를 생성합니다.

짙은 청록색 테두리가 있는 녹색 원
p->beginPath();
p->circle(100, 100, 80);
p->fill();
p->stroke();

void QCanvasPainter::circle(QPointF centerPoint, qreal radius)

centerPoint 를 중심으로, radius 을 사용하여 새로운 원형 서브 경로를 생성합니다.

이 함수는 오버로딩된 함수입니다.

void QCanvasPainter::cleanupResources()

캐시에서 사용되지 않는 텍스처를 제거하는 스케줄러입니다.

또한, 메모리 사용량을 최소화하기 위해 이 함수를 호출할 때 다른 캐시 및 풀의 크기가 축소될 수 있습니다. 이로 인해 이후의 드로잉 호출에 더 많은 비용이 발생할 수 있습니다.

void QCanvasPainter::clearRect(qreal x, qreal y, qreal width, qreal 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 플래그는 작동하지 않습니다.

참고: 오프스크린캔버스는 메인 렌더 타깃과 독립적인 텍스처로 뒷받침되며, 여기에 대한 렌더링은 항상 배율(디바이스 픽셀 비율) 1로 수행됩니다. 예를 들어, QCanvasPainterWidget 의 실제 렌더링 크기와 일치하는 캔버스를 생성하려면 size() * devicePixelRatio() 를 pixelSize 로 전달해야 합니다. 위젯의 size() 는 배율이 포함되지 않은 논리적 크기이기 때문입니다.

void QCanvasPainter::destroyCanvas(QCanvasOffscreenCanvas &canvas)

canvas 를 뒷받침하는 리소스를 해제합니다. 이때 canvas 는 null canvas 가 됩니다.

페인터는 소멸될 때 자동으로 이 작업을 수행합니다. 따라서 이 함수를 호출해야 하는 경우는 관련 리소스를 즉시 해제하고자 할 때뿐입니다.

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);
shadow.setBlur(30);
p->drawBoxShadow(shadow);
p->beginPath();
p->roundRect(rect, 30);
p->setFillStyle("#2CDE85");
p->fill();

QCanvasBoxShadow도 참조하십시오 .

void QCanvasPainter::drawImage(const QCanvasImage &image, qreal x, qreal y)

image 를 x, y 에 기본 크기로 그려 넣습니다.

기본 크기로 그려진 녹색 Qt 로고
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 영역에서 image 를 destinationRect 의 위치와 크기로 그려 넣습니다.

Qt 로고의 원본 영역에서 잘라낸 확대된 ‘Q’ 문자
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, qreal x, qreal y, qreal width, qreal height)

image 를 x, y 에, 주어진 width 및 height 에서 그립니다.

사용자 정의 너비와 높이에 맞게 그린 Qt 로고가 세로로 늘어난 모습
static QImage logo(":/qt_logo.png");
QCanvasImage image = p->addImage(logo);
p->drawImage(image, 50, 0, 100, 200);

이 함수는 오버로드된 함수입니다.

addImage()도 참조하십시오 .

void QCanvasPainter::ellipse(qreal centerX, qreal centerY, qreal radiusX, qreal radiusY)

( centerX, centerY)을 중심으로, radiusX 및 radiusY 을 가진 새로운 타원형 하위 경로를 생성합니다.

짙은 청록색 테두리가 있는 넓은 녹색 타원
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, qreal radiusX, qreal radiusY)

centerPoint 를 중심으로, radiusX 및 radiusY 를 갖는 새로운 타원형 하위 경로를 생성합니다.

이 함수는 오버로드된 함수입니다.

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() 및 setFillRule()도 참조하십시오 .

[since 6.12] void QCanvasPainter::fill(QCanvasPainter::FillRule fillRule)

현재 경로를 현재 채우기 스타일과 채우기 규칙 fillRule 으로 채웁니다.

이 함수는 오버로드된 함수입니다.

이 함수는 Qt 6.12에서 도입되었습니다.

setFillStyle() 및 setFillRule()도 참조하십시오 .

void QCanvasPainter::fill(const QCanvasPath &path, int pathGroup = -1)

path 를 현재 채우기 스타일과 채우기 규칙으로 채우며, 이는 pathGroup 에 속합니다. 경로에 명령어가 더 많이 포함되어 있고 대부분 정적일 때는 QCanvasPath 를 통한 그리기가 가장 적합합니다.

pathGroup 가 -1 인 경우, 경로는 GPU 측에 캐시되지 않습니다. 이것이 기본값입니다. 경로 데이터의 캐싱을 요청하려면 0 보다 크거나 같은 값을 전달하십시오. 경로 캐시 그룹 사용에 대한 자세한 내용은 QCanvasPath 문서를 참조하십시오.

이 메서드를 호출하기 전에 beginPath()를 호출할 필요는 없습니다.

폭이 각기 다른 채워진 가로 막대들이 쌓여 모래시계 모양을 이루고 있다
// m_path is QCanvasPath
if (m_path.isEmpty()) {
    for (int i = 0; i < 16; i++) {
        qreal w = 100 + 60 * sin(i);
        m_path.rect(100 - w * 0.5,
                    22 + i * 10,
                    w, 6);
    }
}
p->fill(m_path);

이 함수는 오버로드된 함수입니다.

setFillStyle(), setFillRule(), removePathGroup()도 참조하십시오 .

[since 6.12] void QCanvasPainter::fill(const QCanvasPath &path, QCanvasPainter::FillRule fillRule, int pathGroup = -1)

path 에 현재 채우기 스타일과 채우기 규칙을 적용합니다. fillRule

이 함수는 오버로드된 함수입니다.

이 함수는 Qt 6.12에서 도입되었습니다.

void QCanvasPainter::fillRect(qreal x, qreal y, qreal width, qreal 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, qreal x, qreal y, qreal maxWidth = 0)

지정된 위치( x, y)에 현재 textAlign 및 textBaseline 설정을 적용하여 “ text ” 문자열을 그립니다. 텍스트를 여러 줄로 줄바꿈하려면 setTextWrapMode()를 사용하여 줄바꿈 모드를 기본값인 NoWrap 이외의 값으로 설정하십시오. 선택적 매개변수 maxWidth 의 기본값은 0 입니다. 즉, 예를 들어 WordWrap 가 설정된 경우, 텍스트는 단어 단위로 줄바꿈됩니다. maxWidth 매개변수를 원하는 행 너비(픽셀 단위)로 설정하십시오.

p->setTextAlign(QCanvasPainter::TextAlign::Center);
p->setTextBaseline(QCanvasPainter::TextBaseline::Middle);
QString text("Qt Canvas Painter");
p->fillText(text, 100, 30);
p->setTextWrapMode(QCanvasPainter::WrapMode::WordWrap);
p->fillText(text, 100, 90);
p->fillText(text, 100, 160, 120);

setTextAlign(), setTextBaseline(), setTextWrapMode()도 참조하십시오 .

void QCanvasPainter::fillText(const QString &text, const QRectF &rect)

현재 textAlign 및 textBaseline 설정을 사용하여 rect 내부에 text 문자열을 그립니다. rect 매개변수의 너비가 maxWidth로 사용됩니다.

이 메서드는 ` QRectF`을 사용하는 오버로드된 메서드입니다. 이 메서드를 사용하여 텍스트를 그릴 때 텍스트 기준선을 ` TextBaseline::Top ` 또는 ` TextBaseline::Middle `로 설정하는 것이 종종 유용합니다.

p->setTextAlign(QCanvasPainter::TextAlign::Center);
p->setTextBaseline(QCanvasPainter::TextBaseline::Middle);
QString text("Qt Canvas Painter");
QRectF rect1(10, 20, 180, 50);
p->strokeRect(rect1);
p->fillText(text, rect1);
p->setTextWrapMode(QCanvasPainter::WrapMode::WordWrap);
QRectF rect2(60, 90, 80, 90);
p->strokeRect(rect2);
p->fillText(text, rect2);

이것은 오버로드된 함수입니다.

setTextAlign(), setTextBaseline(), setTextWrapMode()도 참조하십시오 .

void QCanvasPainter::fillText(const QString &text, QPointF point, qreal maxWidth = 0)

지정된 point 위치에 현재 textAlign 및 textBaseline 설정을 적용하여 text 문자열을 그립니다. 텍스트를 여러 줄로 나누려면 setTextWrapMode()를 사용하여 텍스트 줄바꿈 모드를 기본값인 NoWrap 이외의 값으로 설정하십시오. 선택적 maxWidth 매개변수의 기본값은 0 입니다. 즉, 예를 들어 WordWrap 로 설정된 경우, 텍스트는 단어 단위로 줄바꿈됩니다. maxWidth 매개변수를 원하는 행 너비(픽셀 단위)로 설정합니다.

이 메서드는 QPointF 를 사용하는 오버로드된 메서드입니다.

이것은 오버로드된 함수입니다.

setTextAlign(), setTextBaseline() 및 setTextWrapMode()도 참조하십시오 .

QTransform QCanvasPainter::getTransform() const

현재 변환을 반환합니다.

void QCanvasPainter::lineTo(qreal x, qreal 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 까지의 선분을 추가합니다.

이 함수는 오버로드된 함수입니다.

void QCanvasPainter::moveTo(qreal x, qreal y)

( x, y)을 첫 번째 점으로 하는 새로운 하위 경로를 시작합니다.

void QCanvasPainter::moveTo(QPointF point)

point 를 첫 번째 점으로 하는 새로운 하위 경로를 시작합니다.

이 함수는 오버로드된 함수입니다.

void QCanvasPainter::quadraticCurveTo(qreal cpX, qreal cpY, qreal x, qreal y)

경로의 마지막 점에서 제어점을 경유하여(cpX, cpY) 지정된 점(x, y)까지 이차 베지어 세그먼트를 추가합니다.

두 개의 2차 곡선으로 이루어진 뾰족한 녹색 잎 모양
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(qreal x, qreal y, qreal width, qreal 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 `을 제거합니다. 이후 ` pathGroup `에 대해 ` fill()` 또는 ` stroke()`를 호출하면 그룹 캐시에 경로가 다시 생성됩니다.

참고: 경로는 페인터의 소멸자에서 자동으로 제거되므로 일반적으로이 메서드를 호출할 필요는 없습니다. 이 메서드는 pathGroup 가 더 이상 필요하지 않거나, 예를 들어 경로의 명령어 수가 과거에 비해 현저히 줄어들어 버퍼 크기를 줄여야 할 때 메모리 사용량을 줄이기 위한 목적으로만 사용하십시오.

fill() 및 stroke()도 참조하십시오 .

void QCanvasPainter::reset()

현재 페인터 상태를 기본값으로 재설정합니다.

여기에는 획 및 채우기 스타일과 관련 속성, 변환 행렬, 클리핑 영역, 텍스트 관련 설정, 합성 속성, 그리기 상태 스택, 앤티앨리어싱 설정이 포함됩니다.

참고: 이 메서드는 캔버스 버퍼를 시각적으로 지우지 않는다는 점에서 HTML Canvas 2D Context의 reset() 메서드와 다릅니다.

참고: setWindingEnforce() 및 setHighQualityStroking()의값은 변경되지 않습니다.

재설정 후 그려진 검은색 채움 사각형과 윤곽선 사각형 위에 회전된 녹색 둥근 직사각형
// 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);

save() 및 restore()도 참조하십시오 .

void QCanvasPainter::resetClipping()

클리핑을 초기화하고 비활성화합니다.

setClipRect()도 참조하십시오 .

void QCanvasPainter::resetTransform()

현재 변환을 단위 행렬로 초기화합니다.

void QCanvasPainter::restore()

현재 렌더링 상태를 팝하고 복원합니다. 따라서 이전에 저장된 상태가 복원됩니다. save()이 호출되지 않았고 상태 스택이 비어 있는 경우, 이 메서드를 호출해도 아무 일도 일어나지 않습니다.

save()도 참조하십시오 .

void QCanvasPainter::rotate(qreal angle)

현재 좌표계를 angle 만큼 시계 방향으로 회전합니다.

각도는 라디안 단위로 지정됩니다. 도에서 라디안으로 변환하려면 ` qDegreesToRadians()`를 사용하십시오.

45도 회전된 녹색 둥근 직사각형과, 그 경로를 따라 회전된 “Cute!”라는 텍스트
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(qreal x, qreal y, qreal width, qreal height, qreal 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, qreal radius)

rect 에 모서리가 radius 인 새로운 둥근 직사각형 모양의 하위 경로를 생성합니다. 이는 QRectF 을 사용하는 오버로드된 메서드입니다.

이것은 오버로드된 함수입니다.

void QCanvasPainter::roundRect(const QRectF &rect, qreal radiusTopLeft, qreal radiusTopRight, qreal radiusBottomRight, qreal radiusBottomLeft)

rect 에서 둥근 직사각형 모양의 새로운 하위 경로를 생성합니다. 모서리 둥글림 정도는 모서리마다 다르게 설정할 수 있으며, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft 을 사용할 수 있습니다.

이 함수는 오버로드된 함수입니다.

void QCanvasPainter::roundRect(qreal x, qreal y, qreal width, qreal height, qreal radiusTopLeft, qreal radiusTopRight, qreal radiusBottomRight, qreal 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(qreal 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(qreal scaleX, qreal scaleY)

현재 좌표계를 scaleX 및 scaleY 값으로 확대/축소합니다.

이 함수는 오버로드된 함수입니다.

void QCanvasPainter::setAntialias(qreal antialias)

현재 앤티앨리어싱 수준을 픽셀 단위로 antialias 로 설정합니다. 앤티앨리어싱을 높이면 더 매끄럽게 그려집니다. 이 설정은 채우기 및 선 그리기 작업에만 영향을 미치며, 이미지나 텍스트에는 적용되지 않습니다. 기본값은 1.0 이며, 최대값은 10.0 입니다.

앤티앨리어싱은 경로별로 수정할 수 있으므로 각 획/채우기 전에 설정할 수 있습니다. 앤티앨리어싱을 비활성화하고 렌더링 비용을 줄이려면 앤티앨리어싱을 0 로 설정하십시오.

앤티앨리어싱이 증가함에 따라 점점 더 부드러워지고 흐릿해지는 물결무늬 선들의 겹
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();
}

setTextAntialias()도 참조하십시오 .

void QCanvasPainter::setClipRect(qreal x, qreal y, qreal width, qreal height)

현재 시저 사각형을 (x, y, width, height)로 설정합니다. 시저 사각형은 현재 변환에 따라 변환됩니다.

참고: 클리핑은 성능에 약간의 부담을 주므로, 필요한 경우에만 사용해야 합니다.

녹색 4분의 1 원과 “Clip me”라는 텍스트가 사각형 영역에 잘려 있습니다.
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()도 참조하십시오 .

[since 6.12] void QCanvasPainter::setFillRule(QCanvasPainter::FillRule fillRule)

경로 채우기 규칙을 ` fillRule`로 설정합니다. 이 값은 규칙이 설정된 후 이루어지는 모든 ` fill()` 호출에 적용됩니다. 기본 채우기 규칙은 QCanvasPainter::FillRule::NonZero

서로 겹쳐진 두 개의 녹색 다섯 뾰족별 중 하나는 안이 꽉 채워져 있고, 다른 하나는 가운데가 비어 있다
auto paintStar = [p]() {
    p->beginPath();
    p->moveTo(120, 60);
    for (int i = 1; i < 6; ++i) {
        p->lineTo(60 + 60 * cos(0.8 * i * M_PI),
                  60 + 60 * sin(0.8 * i * M_PI));
    }
    p->fill();
    p->stroke();
};
p->setFillRule(QCanvasPainter::FillRule::NonZero);
paintStar();
p->translate(75, 75);
p->setFillRule(QCanvasPainter::FillRule::EvenOdd);
paintStar();

이 함수는 Qt 6.12에서 도입되었습니다.

void QCanvasPainter::setFillStyle(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, 0, 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(qreal alpha)

전역 알파(투명도) 값을 alpha 로 설정합니다. 이 알파 값은 렌더링되는 모든 도형에 적용됩니다. 이미 투명한 경로의 경우, 비례에 따라 투명도가 더욱 높아집니다. 알파 값은 0.0(완전 투명)에서 1.0(완전 불투명) 사이여야 합니다. 기본적으로 알파 값은 1.0 입니다.

녹색 타일 위에 있는 네 개의 Qt 로고가 그리드 전체에 걸쳐 서서히 완전히 투명해지는 효과
static QImage logo(":/qt_logo2.png");
QCanvasImage image = p->addImage(logo);
p->setFillStyle("#d9f720");
for (int i = 0; i < 4; i++) {
    qreal x = 100 * (i % 2);
    qreal 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(qreal value)

전역 밝기를 value 로 설정합니다. 이 밝기는 렌더링되는 모든 도형에 적용됩니다. 값을 0으로 설정하면 도형이 완전히 검은색으로 표시됩니다. 밝기를 높이려면 값을 1.0보다 크게 설정할 수도 있습니다. 기본적으로 밝기는 1.0 입니다.

격자 무늬를 따라 밝은 색에서 거의 검은색에 가까워지는 녹색 타일 위에 놓인 네 개의 Qt 로고
static QImage logo(":/qt_logo2.png");
QCanvasImage image = p->addImage(logo);
p->setFillStyle("#d9f720");
for (int i = 0; i < 4; i++) {
    qreal x = 100 * (i % 2);
    qreal 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 ’입니다.

참고: 합성 모드가 제대로작동하려면 ‘ alphaBlending ’를 활성화하고 캔버스에 투명한 배경을 사용해야 합니다.

QList<QCanvasPainter::CompositeOperation> modes = {
    QCanvasPainter::CompositeOperation::SourceOver,
    QCanvasPainter::CompositeOperation::SourceAtop,
    QCanvasPainter::CompositeOperation::DestinationOut
};
for (int i = 0; i < modes.size(); i++) {
    // First item - SourceOver mode
    p->setGlobalCompositeOperation(QCanvasPainter::CompositeOperation::SourceOver);
    qreal y = 5 + i * 65;
    p->setFillStyle("#D9F720");
    p->fillRect(20, y, 140, 40);
    // Second item - Different modes
    p->setGlobalCompositeOperation(modes[i]);
    p->beginPath();
    p->ellipse(130, y + 30, 60, 25);
    p->setStrokeStyle("#00414A");
    p->setFillStyle("#2CDE85");
    p->fill();
    p->stroke();
}

void QCanvasPainter::setGlobalContrast(qreal value)

전역 대비를 value 로 설정합니다. 이 대비는 렌더링되는 모든 도형에 적용됩니다. 값을 0으로 설정하면 도형이 완전히 회색(0.5, 0.5, 0.5)으로 표시됩니다. 대비를 높이려면 값을 1.0보다 크게 설정할 수도 있습니다. 기본적으로 대비는 1.0 입니다.

녹색 타일 위에 있는 네 개의 Qt 로고로, 대비가 강한 것부터 옅은 회색으로 번진 것까지 다양함
static QImage logo(":/qt_logo2.png");
QCanvasImage image = p->addImage(logo);
p->setFillStyle("#d9f720");
for (int i = 0; i < 4; i++) {
    qreal x = 100 * (i % 2);
    qreal 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::setGlobalSaturation(qreal value)

전역 채도 값을 value 로 설정합니다. 이 채도 값은 렌더링되는 모든 도형에 적용됩니다. 값을 0으로 설정하면 채도가 비활성화되어 그리기가 완전히 그레이스케일로 처리됩니다. 채도를 높이려면 값을 1.0보다 크게 설정할 수도 있습니다. 기본적으로 채도 값은 1.0 입니다.

그리드 전체에 걸쳐 선명한 색상에서 그레이스케일로 점차 변해가는 녹색 타일 위에 놓인 네 개의 Qt 로고
static QImage logo(":/qt_logo2.png");
QCanvasImage image = p->addImage(logo);
p->setFillStyle("#d9f720");
for (int i = 0; i < 4; i++) {
    qreal x = 100 * (i % 2);
    qreal y = 100 * (i / 2);
    QRectF rect(x, y, 100, 100);
    p->setGlobalSaturation(1.5 - i * 0.5);
    p->fillRect(rect);
    p->drawImage(image, rect);
}

void QCanvasPainter::setHighQualityStroking(bool enabled)

고품질 스트로크를 ` enabled`로 설정합니다. 이 값을 ` true `로 설정하면, 스트로크가 겹치거나 불투명도가 100%가 아닌 드문 경우에서 더 정확한 렌더링이 이루어집니다. 이 기능을 활성화하면 렌더링 비용이 증가합니다. 기본값은 ` false`입니다.

// Increase the line width and reduce opacity to get
// the stroking flaws visible.
p->setLineWidth(20);
p->setGlobalAlpha(0.5);
if (m_path.isEmpty()) {
    m_path.moveTo(30, 30);
    m_path.lineTo(40, 30);
    m_path.lineTo(80, 170);
    m_path.lineTo(80, 30);
    m_path.lineTo(70, 30);
}
p->setHighQualityStroking(true);
p->stroke(m_path);
p->setHighQualityStroking(false);
p->translate(90, 0);
p->stroke(m_path);

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(qreal width)

스트로크의 선 너비를 픽셀 단위로 width 로 설정합니다. 기본 선 너비는 1.0 입니다. 앤티앨리어싱이 활성화된 경우, 1픽셀보다 얇은 너비는 불투명도가 자동으로 점차적으로 줄어들어 부드러운 출력 결과를 만들어 냅니다.

선 굵기가 점차 두꺼워지면서 그려진 물결 모양의 곡선들이 쌓여 있는 그림
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(qreal limit)

마이터 제한값을 limit 로 설정합니다. 마이터 제한값은 날카로운 모서리가 베벨 처리되는 시점을 제어합니다. 모서리 길이가 이 제한값을 초과하게 되면, 대신 선들 사이에 QCanvasPainter::LineJoin::Bevel 가 적용됩니다. 이 설정은 QCanvasPainter::LineJoin::Miter 선 연결 방식에서만 적용됩니다. 기본 제한값은 10.0 입니다.

QCanvasPath path;
path.moveTo(20, 40);
path.lineTo(30, 130);
path.lineTo(40, 40);
path.lineTo(55, 80);

p->setLineJoin(QCanvasPainter::LineJoin::Miter);
p->setMiterLimit(20);
p->stroke(path);

p->setMiterLimit(8);
p->translate(65, 0);
p->stroke(path);

p->setMiterLimit(2);
p->translate(65, 0);
p->stroke(path);

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::setStrokeStyle(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(qreal antialias)

현재 텍스트 앤티앨리어싱 강도를 설정합니다. 값 antialias 은 일반 앤티앨리어싱에 적용되는 배율로, 0.0 는 앤티앨리어싱을 비활성화하고 2.0은 앤티앨리어싱 강도를 두 배로 높입니다. 기본값은 1.0입니다.

참고: 사용된 텍스트 앤티앨리어싱 기술(SDF)의특성상 , 최대 앤티앨리어싱 수준은 상당히 제한적이며, 글꼴 크기가 작을수록 이 영향은 덜합니다.

‘앤티앨리어싱 1.0’부터 ‘4.0’까지 표시된 선들이 점점 더 부드러워지고 흐릿해집니다.
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 입니다.

p->setTextAlign(QCanvasPainter::TextAlign::Center);
p->setTextBaseline(QCanvasPainter::TextBaseline::Middle);
QFont font("Titillium Web", 32);
p->setFont(font);
p->setFillStyle(QColorConstants::Black);
p->fillText("Hi!", 100, 50);
p->setTextDirection(QCanvasPainter::TextDirection::RightToLeft);
p->fillText("Hi!", 100, 150);

void QCanvasPainter::setTextLineHeight(qreal height)

줄 바꿈된 텍스트에 대해 줄 높이 조정 값을 픽셀 단위로 height 로 설정합니다. 기본 줄 높이는 0 입니다.

-10, 0, 10 픽셀의 줄 간격을 보여주는 세 개의 상자에 담긴 두 줄의 텍스트
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::setWindingEnforce(bool enabled)

와인딩 강제 적용을 ` enabled`로 설정합니다. 이 값을 ` false `로 설정하면 ` setPathWinding()`에 설정된 내용과 일치하도록 경로 와인딩을 강제 적용하는 기능이 비활성화됩니다. 이 기능을 비활성화하면, 예를 들어 시계 방향 순서로 점을 추가하여 경로에 구멍을 만들 수 있습니다. 또한 비활성화하면 성능이 향상될 수 있습니다. 기본값은 ` true`입니다.

p->setWindingEnforce(false);
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();

void QCanvasPainter::skew(qreal angleX, qreal angleY = 0.0)

현재 좌표계를 X축 방향으로 angleX, Y축 방향으로 angleY 만큼 비스듬히 변환(전단)합니다. 각도는 라디안 단위로 지정됩니다.

“Cute!”라는 텍스트가 적힌 녹색 둥근 직사각형이 사다리꼴 모양으로 기울어져 있는 그림
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 = -1)

path 에 현재 획 스타일을 적용하여 pathGroup 에 속하는 경로를 그립니다. 경로에 명령어가 많고 대체로 정적인 경우, QCanvasPath 을 통한 그리기가 가장 적합합니다.

pathGroup 가 -1 인 경우, 경로의 렌더링 관련 데이터는 캐시되지 않습니다. 이것이 기본값입니다. 경로 데이터의 캐싱을 요청하려면 0 보다 크거나 같은 값을 전달하십시오. 경로 캐시 그룹 사용에 대한 자세한 내용은 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() 및 removePathGroup()도 참조하십시오 .

void QCanvasPainter::strokeRect(qreal x, qreal y, qreal width, qreal 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, qreal x, qreal y, qreal maxWidth = 0) const

(x, y)에서 text 문자열의 바운딩 박스 크기를 측정합니다.

여러 줄로 된 텍스트의 크기를 측정하려면, ` setTextWrapMode()`를 사용하여 텍스트 줄바꿈 모드를 기본값인 ` NoWrap` 이외의 값으로 설정하십시오. 또한 선택적 매개변수 ` maxWidth `을 픽셀 단위의 선호하는 행 너비로 설정하십시오.

QRectF 함수를 호출하여 [xmin, ymin, width, height] 값을 반환합니다. 측정된 값은 로컬 좌표계에서 반환됩니다.

Qt로 작성된 텍스트가 한 줄로 표시되기도 하고 두 줄로 줄바꿈되기도 하며, 각 줄은 측정된 경계 상자 내에 배치됩니다.
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) const

rect 에서 ‘ text ’ 문자열의 바운딩 박스를 측정합니다. [xmin, ymin, width, height] 값을 가진 QRectF 객체를 반환합니다. 측정된 값은 로컬 좌표계에서 반환됩니다.

이 함수는 오버로드된 함수입니다.

QRectF QCanvasPainter::textBoundingBox(const QString &text, QPointF point, qreal maxWidth = 0) const

point 에서 text 문자열의 바운딩 박스 크기를 측정합니다.

여러 줄로 된 텍스트의 크기를 측정하려면, ` setTextWrapMode()`를 사용하여 텍스트 줄바꿈 모드를 기본값인 ` NoWrap` 이외의 값으로 설정하십시오. 또한 선택적 매개변수 ` maxWidth `를 원하는 행 너비(픽셀 단위)로 설정하십시오.

QRectF 를 반환하며, 값은 [xmin, ymin, width, height]입니다. 측정된 값은 로컬 좌표계에서 반환됩니다.

이 함수는 오버로드된 함수입니다.

void QCanvasPainter::transform(const QTransform &transform)

현재 좌표계에 지정된 변환 매트릭스 transform 를 곱합니다.

중심을 중심으로 반복적으로 회전하여 원형으로 배열된 10개의 녹색 둥근 막대
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(qreal x, qreal 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.