이 페이지에서

QPainter Class

QPainter 클래스는 위젯 및 기타 그리기 장치에 대해 저수준의 그리기 작업을 수행합니다. 더 보기...

헤더: #include <QPainter>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
상속된 항목:

QStylePainter

참고: 이 클래스의 모든 함수는 재진입 가능합니다.

공개 유형

class PixmapFragment
enum CompositionMode { CompositionMode_SourceOver, CompositionMode_DestinationOver, CompositionMode_Clear, CompositionMode_Source, CompositionMode_Destination, …, RasterOp_SourceOrNotDestination }
enum PixmapFragmentHint { OpaqueHint }
flags PixmapFragmentHints
enum RenderHint { Antialiasing, TextAntialiasing, SmoothPixmapTransform, VerticalSubpixelPositioning, LosslessImageRendering, NonCosmeticBrushPatterns }
flags RenderHints

공개 함수

QPainter()
QPainter(QPaintDevice*device)
~QPainter()
const QBrush &background() const
Qt::BGMode backgroundMode() const
bool begin(QPaintDevice*device)
void beginNativePainting()
QRectF boundingRect(const QRectF&rectangle, int flags, const QString&text)
QRect boundingRect(const QRect&rectangle, int flags, const QString&text)
QRectF boundingRect(const QRectF&rectangle, const QString&text, const QTextOption&option = QTextOption())
QRect boundingRect(int x, int y, int w, int h, int flags, const QString&text)
const QBrush &brush() const
QPoint brushOrigin() const
(since 6.11) QPointF brushOriginF() const
QRectF clipBoundingRect() const
QPainterPath clipPath() const
QRegion clipRegion() const
QTransform combinedTransform() const
QPainter::CompositionMode compositionMode() const
QPaintDevice *device() const
const QTransform &deviceTransform() const
void drawArc(const QRectF&rectangle, int startAngle, int spanAngle)
void drawArc(const QRect&rectangle, int startAngle, int spanAngle)
void drawArc(int x, int y, int width, int height, int startAngle, int spanAngle)
void drawChord(const QRectF&rectangle, int startAngle, int spanAngle)
void drawChord(const QRect&rectangle, int startAngle, int spanAngle)
void drawChord(int x, int y, int width, int height, int startAngle, int spanAngle)
void drawConvexPolygon(const QPointF*points, int pointCount)
void drawConvexPolygon(const QPolygon&polygon)
void drawConvexPolygon(const QPolygonF&polygon)
void drawConvexPolygon(const QPoint*points, int pointCount)
void drawEllipse(const QRectF&rectangle)
void drawEllipse(const QRect&rectangle)
void drawEllipse(const QPoint&center, int rx, int ry)
void drawEllipse(const QPointF&center, qreal rx, qreal ry)
void drawEllipse(int x, int y, int width, int height)
void drawGlyphRun(const QPointF&position, const QGlyphRun&glyphs)
void drawImage(const QRectF&target, const QImage&image, const QRectF&source, Qt::ImageConversionFlags flags = Qt::AutoColor)
void drawImage(const QPoint&point, const QImage&image)
void drawImage(const QPointF&point, const QImage&image)
void drawImage(const QRect&rectangle, const QImage&image)
void drawImage(const QRectF&rectangle, const QImage&image)
void drawImage(const QPoint&point, const QImage&image, const QRect&source, Qt::ImageConversionFlags flags = Qt::AutoColor)
void drawImage(const QPointF&point, const QImage&image, const QRectF&source, Qt::ImageConversionFlags flags = Qt::AutoColor)
void drawImage(const QRect&target, const QImage&image, const QRect&source, Qt::ImageConversionFlags flags = Qt::AutoColor)
void drawImage(int x, int y, const QImage&image, int sx = 0, int sy = 0, int sw = -1, int sh = -1, Qt::ImageConversionFlags flags = Qt::AutoColor)
void drawLine(const QLineF&line)
void drawLine(const QLine&line)
void drawLine(const QPoint&p1, const QPoint&p2)
void drawLine(const QPointF&p1, const QPointF&p2)
void drawLine(int x1, int y1, int x2, int y2)
void drawLines(const QLineF*lines, int lineCount)
void drawLines(const QList<QLine>&lines)
void drawLines(const QList<QLineF>&lines)
void drawLines(const QList<QPoint>&pointPairs)
void drawLines(const QList<QPointF>&pointPairs)
void drawLines(const QLine*lines, int lineCount)
void drawLines(const QPoint*pointPairs, int lineCount)
void drawLines(const QPointF*pointPairs, int lineCount)
void drawPath(const QPainterPath&path)
void drawPicture(const QPointF&point, const QPicture&picture)
void drawPicture(const QPoint&point, const QPicture&picture)
void drawPicture(int x, int y, const QPicture&picture)
void drawPie(const QRectF&rectangle, int startAngle, int spanAngle)
void drawPie(const QRect&rectangle, int startAngle, int spanAngle)
void drawPie(int x, int y, int width, int height, int startAngle, int spanAngle)
void drawPixmap(const QRectF&target, const QPixmap&pixmap, const QRectF&source)
void drawPixmap(const QPoint&point, const QPixmap&pixmap)
void drawPixmap(const QPointF&point, const QPixmap&pixmap)
void drawPixmap(const QRect&rectangle, const QPixmap&pixmap)
void drawPixmap(const QPoint&point, const QPixmap&pixmap, const QRect&source)
void drawPixmap(const QPointF&point, const QPixmap&pixmap, const QRectF&source)
void drawPixmap(const QRect&target, const QPixmap&pixmap, const QRect&source)
void drawPixmap(int x, int y, const QPixmap&pixmap)
void drawPixmap(int x, int y, int width, int height, const QPixmap&pixmap)
void drawPixmap(int x, int y, const QPixmap&pixmap, int sx, int sy, int sw, int sh)
void drawPixmap(int x, int y, int w, int h, const QPixmap&pixmap, int sx, int sy, int sw, int sh)
void drawPixmapFragments(const QPainter::PixmapFragment*fragments, int fragmentCount, const QPixmap&pixmap, QPainter::PixmapFragmentHints hints = PixmapFragmentHints())
void drawPoint(const QPointF&position)
void drawPoint(const QPoint&position)
void drawPoint(int x, int y)
void drawPoints(const QPointF*points, int pointCount)
void drawPoints(const QPolygon&points)
void drawPoints(const QPolygonF&points)
void drawPoints(const QPoint*points, int pointCount)
void drawPolygon(const QPointF*points, int pointCount, Qt::FillRule fillRule = Qt::OddEvenFill)
void drawPolygon(const QPolygon&points, Qt::FillRule fillRule = Qt::OddEvenFill)
void drawPolygon(const QPolygonF&points, Qt::FillRule fillRule = Qt::OddEvenFill)
void drawPolygon(const QPoint*points, int pointCount, Qt::FillRule fillRule = Qt::OddEvenFill)
void drawPolyline(const QPointF*points, int pointCount)
void drawPolyline(const QPolygon&points)
void drawPolyline(const QPolygonF&points)
void drawPolyline(const QPoint*points, int pointCount)
void drawRect(const QRectF&rectangle)
void drawRect(const QRect&rectangle)
void drawRect(int x, int y, int width, int height)
void drawRects(const QRectF*rectangles, int rectCount)
void drawRects(const QList<QRect>&rectangles)
void drawRects(const QList<QRectF>&rectangles)
void drawRects(const QRect*rectangles, int rectCount)
void drawRoundedRect(const QRectF&rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize)
void drawRoundedRect(const QRect&rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize)
void drawRoundedRect(int x, int y, int w, int h, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize)
void drawStaticText(const QPointF&topLeftPosition, const QStaticText&staticText)
void drawStaticText(const QPoint&topLeftPosition, const QStaticText&staticText)
void drawStaticText(int left, int top, const QStaticText&staticText)
void drawText(const QPointF&position, const QString&text)
void drawText(const QPoint&position, const QString&text)
void drawText(const QRectF&rectangle, const QString&text, const QTextOption&option = QTextOption())
void drawText(int x, int y, const QString&text)
void drawText(const QRect&rectangle, int flags, const QString&text, QRect*boundingRect = nullptr)
void drawText(const QRectF&rectangle, int flags, const QString&text, QRectF*boundingRect = nullptr)
void drawText(int x, int y, int width, int height, int flags, const QString&text, QRect*boundingRect = nullptr)
void drawTiledPixmap(const QRectF&rectangle, const QPixmap&pixmap, const QPointF&position = QPointF())
void drawTiledPixmap(const QRect&rectangle, const QPixmap&pixmap, const QPoint&position = QPoint())
void drawTiledPixmap(int x, int y, int width, int height, const QPixmap&pixmap, int sx = 0, int sy = 0)
bool end()
void endNativePainting()
void eraseRect(const QRectF&rectangle)
void eraseRect(const QRect&rectangle)
void eraseRect(int x, int y, int width, int height)
void fillPath(const QPainterPath&path, const QBrush&brush)
void fillRect(const QRectF&rectangle, const QBrush&brush)
void fillRect(const QRect&rectangle, QGradient::Preset preset)
void fillRect(const QRect&rectangle, Qt::BrushStyle style)
void fillRect(const QRect&rectangle, Qt::GlobalColor color)
void fillRect(const QRect&rectangle, const QBrush&brush)
void fillRect(const QRect&rectangle, const QColor&color)
void fillRect(const QRectF&rectangle, QGradient::Preset preset)
void fillRect(const QRectF&rectangle, Qt::BrushStyle style)
void fillRect(const QRectF&rectangle, Qt::GlobalColor color)
void fillRect(const QRectF&rectangle, const QColor&color)
void fillRect(int x, int y, int width, int height, QGradient::Preset preset)
void fillRect(int x, int y, int width, int height, Qt::BrushStyle style)
void fillRect(int x, int y, int width, int height, Qt::GlobalColor color)
void fillRect(int x, int y, int width, int height, const QBrush&brush)
void fillRect(int x, int y, int width, int height, const QColor&color)
const QFont &font() const
QFontInfo fontInfo() const
QFontMetrics fontMetrics() const
bool hasClipping() const
bool isActive() const
Qt::LayoutDirection layoutDirection() const
qreal opacity() const
QPaintEngine *paintEngine() const
const QPen &pen() const
QPainter::RenderHints renderHints() const
void resetTransform()
void restore()
void rotate(qreal angle)
void save()
void scale(qreal sx, qreal sy)
void setBackground(const QBrush&brush)
void setBackgroundMode(Qt::BGMode mode)
void setBrush(const QBrush&brush)
(since 6.11) void setBrush(QBrush&&brush)
(since 6.9) void setBrush(QColor color)
void setBrush(Qt::BrushStyle style)
(since 6.9) void setBrush(Qt::GlobalColor color)
void setBrushOrigin(const QPointF&position)
void setBrushOrigin(const QPoint&position)
void setBrushOrigin(int x, int y)
void setClipPath(const QPainterPath&path, Qt::ClipOperation operation = Qt::ReplaceClip)
void setClipRect(const QRectF&rectangle, Qt::ClipOperation operation = Qt::ReplaceClip)
void setClipRect(int x, int y, int width, int height, Qt::ClipOperation operation = Qt::ReplaceClip)
void setClipRect(const QRect&rectangle, Qt::ClipOperation operation = Qt::ReplaceClip)
void setClipRegion(const QRegion&region, Qt::ClipOperation operation = Qt::ReplaceClip)
void setClipping(bool enable)
void setCompositionMode(QPainter::CompositionMode mode)
void setFont(const QFont&font)
void setLayoutDirection(Qt::LayoutDirection direction)
void setOpacity(qreal opacity)
void setPen(const QPen&pen)
(since 6.11) void setPen(QPen&&pen)
void setPen(Qt::PenStyle style)
void setPen(const QColor&color)
void setRenderHint(QPainter::RenderHint hint, bool on = true)
void setRenderHints(QPainter::RenderHints hints, bool on = true)
void setTransform(const QTransform&transform, bool combine = false)
void setViewTransformEnabled(bool enable)
void setViewport(const QRect&rectangle)
void setViewport(int x, int y, int width, int height)
void setWindow(const QRect&rectangle)
void setWindow(int x, int y, int width, int height)
void setWorldMatrixEnabled(bool enable)
void setWorldTransform(const QTransform&matrix, bool combine = false)
void shear(qreal sh, qreal sv)
void strokePath(const QPainterPath&path, const QPen&pen)
bool testRenderHint(QPainter::RenderHint hint) const
const QTransform &transform() const
void translate(const QPointF&offset)
void translate(const QPoint&offset)
void translate(qreal dx, qreal dy)
bool viewTransformEnabled() const
QRect viewport() const
QRect window() const
bool worldMatrixEnabled() const
const QTransform &worldTransform() const

상세 설명

QPainter는 GUI 프로그램에서 필요한 대부분의 그리기 작업을 수행하기 위해 고도로 최적화된 함수들을 제공합니다. 간단한 선부터 원형이나 현과 같은 복잡한 도형에 이르기까지 모든 것을 그릴 수 있습니다. 또한 정렬된 텍스트와 픽스맵도 그릴 수 있습니다. 일반적으로 "자연" 좌표계에서 그리지만, 뷰 및 월드 변환도 수행할 수 있습니다. QPainter는 ` QPaintDevice ` 클래스를 상속받은 모든 객체에 대해 작동할 수 있습니다.

QPainter는 주로 위젯의 paint 이벤트 내에서 사용됩니다. 페인터를 생성하고 사용자 정의(예: 펜이나 브러시 설정)한 다음, 그리기를 수행합니다. 그리기가 끝나면 QPainter 객체를 반드시 소멸시켜야 합니다. 예를 들면 다음과 같습니다:

void SimpleExampleWidget::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.setPen(Qt::blue);
    painter.setFont(QFont("Arial", 30));
    painter.drawText(rect(), Qt::AlignCenter, "Qt");
}

QPainter의 핵심 기능은 그리기이지만, 이 클래스는 QPainter의 설정과 렌더링 품질을 사용자 정의할 수 있는 여러 함수와 클리핑을 가능하게 하는 함수도 제공합니다. 또한 페인터의 합성 모드를 지정하여 서로 다른 도형이 어떻게 합쳐지는지 제어할 수 있습니다.

isActive() 함수는 페인터가 활성 상태인지 여부를 나타냅니다. 페인터는 begin() 함수와 QPaintDevice 인자를 받는 생성자를 통해 활성화됩니다. end() 함수와 소멸자는 페인터를 비활성화합니다.

QPaintDevice 및 QPaintEngine 클래스와 함께 QPainter는 Qt의 페인트 시스템의 기반을 형성합니다. QPainter는 그리기 작업을 수행하는 데 사용되는 클래스입니다. QPaintDevice 는 QPainter를 사용하여 페인팅할 수 있는 장치를 나타냅니다. QPaintEngine 는 페인터가 다양한 유형의 장치에 그리기 위해 사용하는 인터페이스를 제공합니다. 페인터가 활성화된 경우, device()는 페인터가 그리는 페인트 장치를 반환하고, paintEngine()는 페인터가 현재 작동 중인 페인트 엔진을 반환합니다. 자세한 내용은 페인트 시스템을 참조하십시오.

때로는 다른 객체가 특이한 QPaintDevice 위에서 그리도록 하는 것이 바람직할 수 있습니다. QPainter는 이를 수행하는 정적 함수인 setRedirected()를 지원합니다.

경고: 페인트 디바이스가 위젯인경우 , QPainter는 paintEvent() 함수 내부나 paintEvent()가 호출하는 함수 내에서만 사용할 수 있습니다.

설정

사용자 선호에 따라 QPainter가 그리도록 설정할 수 있는 몇 가지 옵션이 있습니다:

  • font()는 텍스트 그리기에 사용되는 글꼴입니다. 페인터 isActive()인 경우, fontInfo() 및 fontMetrics() 함수를 사용하여 각각 현재 설정된 글꼴과 그 메트릭에 대한 정보를 가져올 수 있습니다.
  • brush()는 도형을 채우는 데 사용되는 색상이나 패턴을 정의합니다.
  • pen()는 선이나 경계를 그릴 때 사용되는 색상이나 점무늬를 정의합니다.
  • backgroundMode()는 background()이 있는지 여부를 정의하며, 즉 Qt::OpaqueMode 이거나 Qt::TransparentMode 입니다.
  • background()는 backgroundMode()이 Qt::OpaqueMode 이고 pen()이 stipple인 경우에만 적용됩니다. 이 경우, stipple 내 배경 픽셀의 색상을 지정합니다.
  • brushOrigin()는 타일형 브러시의 원점을 정의하며, 일반적으로 위젯 배경의 원점입니다.
  • viewport(), window(), worldTransform()은 페인터의 좌표 변환 체계를 구성합니다. 자세한 내용은 Coordinate Transformations 섹션과 좌표 체계 문서를 참조하십시오.
  • hasClipping()는 페인터가 클리핑을 수행하는지 여부를 지정합니다. (페인트 장치도 클리핑을 수행합니다.) 페인터가 클리핑을 수행하는 경우, clipRegion()에 따라 클리핑됩니다.
  • layoutDirection()는 페인터가 텍스트를 그릴 때 사용하는 레이아웃 방향을 정의합니다.
  • worldMatrixEnabled()는 월드 변환이 활성화되어 있는지 여부를 나타냅니다.
  • viewTransformEnabled()는 뷰 변환이 활성화되어 있는지 여부를 나타냅니다.

이러한 설정 중 일부는 QWidget::font()과 같은 일부 페인트 장치의 설정을 반영한다는 점에 유의하십시오. QPainter::begin() 함수(또는 이에 상응하는 QPainter 생성자)는 페인트 장치에서 이러한 속성을 복사합니다.

save() 함수를 호출하면 사용 가능한 모든 설정을 내부 스택에 저장하여 언제든지 QPainter의 상태를 저장할 수 있습니다. restore() 함수는 이 설정들을 다시 불러옵니다.

그리기

QPainter는 대부분의 기본 도형을 그리는 함수를 제공합니다: drawPoint(), drawPoints(), drawLine(), drawRect(), drawRoundedRect(), drawEllipse(), drawArc(), drawPie(), drawChord(), drawPolyline(), drawPolygon(), drawConvexPolygon() 및 drawCubicBezier(). 두 가지 편의 함수인 drawRects()와 drawLines()는 현재 펜과 브러시를 사용하여 주어진 QRects 또는 QLines 배열에 지정된 개수의 사각형이나 선을 그립니다.

QPainter 클래스는 또한 주어진 QRect 을 주어진 QBrush 으로 채우는 fillRect() 함수와, 주어진 사각형 내부의 영역을 지우는 eraseRect() 함수를 제공합니다.

이 함수들은 모두 정수형과 부동 소수점형 버전이 있습니다.

도형 및 펜 옵션이 포함된 기본 드로잉 앱기본 그리기 예제

'기본 그리기' 예제는 QPainter 클래스를 사용하여 다양한 스타일로 기본 그래픽 프리미티브를 표시하는 방법을 보여줍니다.

복잡한 도형을 그려야 하는 경우, 특히 이를 반복적으로 수행해야 하는 경우에는 ` QPainterPath `를 생성하고 ` drawPath()`를 사용하여 그리는 것을 고려해 보십시오.

Painter Paths 예제

QPainterPath 클래스는 그리기 작업을 위한 컨테이너를 제공하여 그래픽 도형을 구성하고 재사용할 수 있게 해줍니다.

‘Painter Paths’ 예제는 페인터 경로를 사용하여 렌더링할 복잡한 도형을 만드는 방법을 보여줍니다.

다양한 도형이 포함된 Painter Paths 애플리케이션

QPainter는 또한 주어진 경로( QPainterPath )를 주어진 색상( QBrush)으로 채우는 fillPath() 함수와, 주어진 경로의 윤곽을 그리는(즉, 경로를 스트로크하는) strokePath() 함수를 제공합니다.

또한, 고급 벡터 기법을 사용하여 QPainterPath 로 텍스트를 그리는 방법을 보여주는 ‘벡터 변형(Vector Deformation )’ 예제, Qt에서 사용할 수 있는 다양한 그라데이션 유형을 보여주는 ‘그라데이션(Gradients) ’ 예제, Qt에 내장된 대시 패턴을 보여주고 사용자 정의 패턴을 사용하여 사용 가능한 패턴의 범위를 확장하는 방법을 보여주는 ‘경로 스트로킹(Path Stroking )’ 예제도 참조하십시오.

텍스트 그리기는 drawText()를 사용하여 수행됩니다. 정밀한 위치 지정이 필요한 경우, boundingRect()를 사용하면 주어진 drawText() 명령이 어디에 그려질지 알 수 있습니다.

픽스맵 및 이미지 그리기

픽스맵/이미지를 그리는 함수로는 drawPixmap(), drawImage() 및 drawTiledPixmap()가 있습니다. drawPixmap()과 drawImage()은 모두 동일한 결과를 산출하지만, drawPixmap()은 화면에서 더 빠르고, drawImage()은 QPrinter 이나 다른 장치에서 더 빠를 수 있습니다.

drawPicture() 함수는 QPicture 의 전체 내용을 그립니다. drawPicture() 함수는 QPicture 가 자체 설정을 가지고 있기 때문에, 페인터의 모든 설정을 무시하는 유일한 함수입니다.

고해상도 픽스맵 및 이미지 그리기

픽스맵의 고해상도 버전은 장치 픽셀 비율 값이 1보다 큽니다( QImageReader, QPixmap::devicePixelRatio() 참조). 이 값이 기본 QPaintDevice 의 값과 일치하는 경우, 추가 변환 없이 장치에 직접 그려집니다.

예를 들어, 장치 픽셀 비율이 2인 64x64 픽셀 크기의 QPixmap 를, 마찬가지로 장치 픽셀 비율이 2인 고해상도(DPI) 화면에 그릴 때 이러한 경우가 발생합니다. 이 경우 픽스맵은 사용자 공간에서 사실상 32x32 픽셀 크기가 된다는 점에 유의하십시오. Qt에서 픽스맵 크기를 기반으로 레이아웃 기하 구조를 계산하는 코드 경로는 이 크기를 사용합니다. 결과적으로 픽스맵은 큰 픽스맵이 아닌 고해상도 픽스맵으로 표시됩니다.

렌더링 품질

QPainter를 사용하여 최적의 렌더링 결과를 얻으려면, 플랫폼에 독립적인 ` QImage `를 페인트 장치로 사용해야 합니다. 즉, ` QImage `를 사용하면 어떤 플랫폼에서든 결과가 동일한 픽셀 표현을 갖도록 보장됩니다.

QPainter 클래스는 또한 RenderHint 열거형과 부동 소수점 정밀도 지원을 통해 렌더링 품질을 제어하는 방법을 제공합니다. 프리미티브를 그리는 모든 함수에는 부동 소수점 버전이 있습니다.

painter.drawEllipse(QRectF(-diameter / 2.0, -diameter / 2.0, diameter, diameter));

이들은 종종 ` QPainter::Antialiasing ` 렌더링 힌트와 함께 사용됩니다.

QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
int와 float를 사용하여 동심원을 비교하고, 안티앨리어싱 렌더링 유무에 따른 결과를 살펴봅니다. 부동소수점 정밀도 버전을 사용하면 간격이 균일한 고리가 생성됩니다. 안티앨리어싱 렌더링을 적용하면 매끄러운 원이 나타납니다.앨리어싱이 적용된 경우와 앤티앨리어싱이 적용된 경우를 비교한 동심원

RenderHint 열거형은 QPainter에 전달되는 플래그를 지정하지만, 특정 엔진에 따라 이 플래그가 반영될 수도 있고 반영되지 않을 수도 있습니다. QPainter::Antialiasing 는 엔진이 가능한 경우 프리미티브의 가장자리에 안티앨리어싱을 적용해야 함을 나타내고, QPainter::TextAntialiasing 는 엔진이 가능한 경우 텍스트에 안티앨리어싱을 적용해야 함을 나타내며, QPainter::SmoothPixmapTransform 는 엔진이 부드러운 픽스맵 변환 알고리즘을 사용해야 함을 나타냅니다.

renderHints() 함수는 이 페인터에 설정된 렌더링 힌트를 지정하는 플래그를 반환합니다. setRenderHint() 함수를 사용하여 현재 설정된 RenderHints 를 설정하거나 해제할 수 있습니다.

좌표 변환

일반적으로 QPainter는 장치 고유의 좌표계(대개 픽셀)에서 작동하지만, QPainter는 좌표 변환을 잘 지원합니다.

가장 일반적으로 사용되는 변환은 크기 조정, 회전, 평행 이동 및 전단입니다. 좌표계를 주어진 오프셋만큼 크기 조정하려면 ` scale()` 함수를, 시계 방향으로 회전시키려면 ` rotate()` 함수를, 평행 이동(즉, 점에 주어진 오프셋을 더하는 것)을 하려면 ` translate()` 함수를 사용하십시오. 또한 shear() 함수를 사용하여 원점을 중심으로 좌표계를 비틀 수 있습니다. 전단된 좌표계의 시각화 예시는 ‘아핀 변환’ 예제를 참조하십시오.

변환이 QPainter가 그래픽 프리미티브를 렌더링하는 방식에 어떤 영향을 미치는지 보여주는 ‘변환(Transformations )’ 예제도 참조하십시오. 특히 이 예제에서는 변환의 순서가 결과에 어떤 영향을 미치는지 보여줍니다.

아핀 변환 예제

'아핀 변환' 예제는 Qt가 그리기 작업에 아핀 변환을 수행할 수 있는 기능을 보여줍니다. 또한 이 데모를 통해 사용자는 변환 작업을 직접 실험해 보고 그 결과를 즉시 확인할 수 있습니다.

펭귄 그림을 활용한 아핀 변환 예시

모든 변환 작업은 변환 행렬 ` worldTransform()`을 기반으로 수행됩니다. 행렬은 평면상의 한 점을 다른 점으로 변환합니다. 변환 행렬에 대한 자세한 내용은 ‘좌표계(Coordinate System )’ 및 ‘변환 행렬( QTransform )’ 문서를 참조하십시오.

setWorldTransform() 함수는 현재 설정된 worldTransform()을 대체하거나 추가할 수 있습니다. resetTransform() 함수는 translate(), scale(), shear(), rotate(), setWorldTransform(), setViewport() 및 setWindow() 함수를 사용하여 수행된 모든 변환을 초기화합니다. deviceTransform()은 논리 좌표를 플랫폼 종속 페인트 장치의 장치 좌표로 변환하는 행렬을 반환합니다. 후자의 함수는 플랫폼에 종속적인 핸들에서 플랫폼 페인팅 명령을 사용할 때, 그리고 해당 플랫폼이 기본적으로 변환을 수행하지 않는 경우에만 필요합니다.

QPainter로 그릴 때, 우리는 논리 좌표를 사용하여 점을 지정하고, 이 좌표는 이후 페인트 장치의 물리적 좌표로 변환됩니다. 논리 좌표와 물리 좌표 간의 매핑은 QPainter의 ` combinedTransform()` 함수가 처리하며, 이 함수는 ` viewport()`, ` window()` 및 ` worldTransform()`의 조합입니다. ` viewport()`는 임의의 사각형을 지정하는 물리 좌표를 나타내고, ` window()`는 논리 좌표로 동일한 사각형을 설명하며, ` worldTransform()`는 변환 행렬과 동일합니다.

‘좌표계’ 항목도 참조하십시오.

클리핑

QPainter는 모든 그리기 작업을 직사각형, 영역 또는 벡터 경로로 클리핑할 수 있습니다. 현재 클리핑 설정은 ` clipRegion()` 및 ` clipPath()` 함수를 사용하여 확인할 수 있습니다. 경로와 영역 중 어느 쪽을 사용하는 것이 더 빠른지는 기본으로 사용되는 ` paintEngine()`에 따라 달라집니다. 예를 들어, ` QImage ` 페인트 엔진은 경로를 선호하는 반면, X11 페인트 엔진은 영역을 선호합니다. 클리핑 설정은 페인터의 논리 좌표계에서 이루어집니다.

QPainter의 클리핑 처리 후, 페인트 장치에서도 클리핑이 수행될 수 있습니다. 예를 들어, 대부분의 위젯은 자식 위젯이 사용하는 픽셀을 잘라내고, 대부분의 프린터는 용지 가장자리 근처의 영역을 잘라냅니다. 이러한 추가적인 클리핑은 clipRegion() 또는 hasClipping()의 반환값에 반영되지 않습니다.

합성 모드

QPainter는 디지털 이미지 합성을 위한 Porter-Duff 규칙을 정의하는 CompositionMode 열거형을 제공합니다. 이 열거형은 한 이미지(소스)의 픽셀과 다른 이미지(대상)의 픽셀을 결합하는 모델을 설명합니다.

가장 일반적인 두 가지 합성 방식은 ‘ Source ’와 ‘ SourceOver ’입니다. ‘ Source ’은 페인트 장치에 불투명한 객체를 그리는 데 사용됩니다. 이 모드에서는 소스 이미지의 각 픽셀이 대상 이미지의 해당 픽셀을 대체합니다. ‘ SourceOver ’ 합성 모드에서는 소스 객체가 투명하며 대상 객체 위에 그려집니다.

합성 변환은 픽셀 단위로 수행된다는 점에 유의하십시오. 이러한 이유로 그래픽 프리미티브 자체를 사용하는 것과 그 경계 사각형을 사용하는 것에는 차이가 있습니다. 경계 사각형에는 알파 값이 0인 픽셀(즉, 프리미티브를 둘러싼 픽셀)이 포함됩니다. 이러한 픽셀은 다른 이미지의 픽셀을 덮어쓰며 사실상 해당 픽셀을 지워버리는 반면, 프리미티브는 자신의 영역만 덮어씁니다.

이미지가 혼합된 구성 모드 예시합성 모드 예제

Qt의 예제 디렉터리에 있는 ‘Composition Modes’ 예제를 통해 다양한 합성 모드를 직접 실험해 보고 그 결과를 즉시 확인할 수 있습니다.

제한 사항

Qt의 래스터 기반 페인트 엔진에서 좌표를 사용하는 경우,+/- 215보다 큰 좌표는 사용할 수 있지만, 이 범위 밖의 좌표로 수행된 그리기 작업은 표시되지 않을 수 있으며, 그림이 잘릴 수 있다는 점을 유의해야 합니다. 이는 구현 과정에서 ` short int `가 사용되기 때문입니다.

Qt의 스트로커가 생성하는 윤곽선은 곡선 모양을 다룰 때 대략적인 값에 불과합니다. 대부분의 경우 베지어 곡선 세그먼트의 윤곽을 다른 베지어 곡선 세그먼트로 표현하는 것은 불가능하므로, Qt는 여러 개의 작은 곡선을 사용하여 곡선 윤곽을 근사화합니다. 성능상의 이유로 Qt가 이러한 윤곽선에 사용하는 곡선의 수에는 제한이 있으며, 따라서 펜 너비나 배율을 크게 설정할 경우 윤곽선 오차가 증가합니다. 오차가 더 작은 윤곽선을 생성하려면 QPainterPathStroker 클래스를 사용할 수 있는데, 이 클래스에는 사용자가 오차 허용 범위를 지정할 수 있는 setCurveThreshold 멤버 함수가 있습니다. 또 다른 해결 방법은 경로를 먼저 다각형으로 변환한 다음, 다각형을 그리는 것입니다.

마찬가지로 Qt는 호와 타원을 삼차 베지어 곡선으로 근사화하며, 삼각법으로 계산하지 않기 때문에 호 위의 점들은 실제 위치에서 약간 어긋나게 됩니다. 이와 관련하여, ` drawArc()`, ` drawPie()` 및 ` drawChord()`가 취하는 각도는 편심각입니다. 즉, 이 각도는 바운딩 사각형이 정사각형일 때만 그 중심을 기준으로 한 방향을 측정합니다. 두 가지 모두에 대한 자세한 내용은 Arcs and Ellipses 을 참조하십시오.

성능

QPainter는 개발자가 그라데이션, 합성 모드, 벡터 그래픽 등 매우 다양한 그래픽 작업을 수행할 수 있게 해주는 풍부한 프레임워크입니다. 또한 QPainter는 다양한 하드웨어 및 소프트웨어 스택에서 이러한 작업을 수행할 수 있습니다. 당연히 기반이 되는 하드웨어와 소프트웨어의 조합은 성능에 어느 정도 영향을 미치며, 다양한 합성 모드, 브러시, 클리핑, 변환 등의 모든 조합에서 모든 개별 작업이 빠르게 수행되도록 보장하는 것은 조합의 수가 너무 많아 사실상 불가능한 작업에 가깝습니다. 타협의 일환으로, 우리는 QPainter API와 백엔드 중 일부를 선별하여, 주어진 하드웨어 및 소프트웨어 조합에서 합리적으로 달성 가능한 최상의 성능을 보장하도록 했습니다.

우리가 고성능 엔진으로 중점을 두고 있는 백엔드는 다음과 같습니다:

  • Raster - 이 백엔드는 모든 렌더링을 순수 소프트웨어 방식으로 구현하며, 항상 QImage로 렌더링하는 데 사용됩니다. 최적의 성능을 얻으려면 QImage::Format_ARGB32_Premultiplied, QImage::Format_RGB32 또는 QImage::Format_RGB16 형식만 사용하십시오. QImage::Format_ARGB32 을 포함한 그 외의 모든 형식은 성능이 현저히 떨어집니다. 이 엔진은 QWidget 및 QPixmap 에서 기본적으로 사용됩니다.
  • OpenGL 2.0 (ES) - 이 백엔드는 하드웨어 가속 그래픽을 위한 주요 백엔드입니다. OpenGL 2.0 또는 OpenGL/ES 2.0 사양을 지원하는 데스크톱 컴퓨터 및 임베디드 장치에서 실행할 수 있습니다. 여기에는 지난 몇 년 동안 생산된 대부분의 그래픽 칩이 포함됩니다. QOpenGLWidget 에 QPainter를 적용하여 이 엔진을 활성화할 수 있습니다.

이러한 작업은 다음과 같습니다:

  • 단순 변환, 즉 평행 이동 및 크기 조정, 그리고 0도, 90도, 180도, 270도 회전.
  • drawPixmap() 단순 변환 및 불투명도와 결합된, 비선형 변환 모드(QPainter::SmoothPixmapTransform 가 렌더링 힌트로 활성화되지 않은 경우).
  • 단색, 2색 선형 그라데이션 및 단순 변환을 적용한 사각형 채우기.
  • 단순 변형 및 교차 클리핑(intersect clip)이 적용된 직사각형 클리핑.
  • 합성 모드 QPainter::CompositionMode_Source 및 QPainter::CompositionMode_SourceOver.
  • 단색 및 2색 선형 그라데이션 채우기를 사용한 둥근 사각형 채우기.
  • qDrawBorderPixmap 을 통해 생성된 3x3 패치된 픽스맵.

이 목록은 성능이 중요한 애플리케이션에서 안전하게 사용할 수 있는 기능을 보여줍니다. 특정 설정에서는 다른 작업도 빠를 수 있지만, 이를 광범위하게 사용하기 전에 소프트웨어가 최종적으로 실행될 시스템에서 벤치마킹을 수행하고 검증하는 것이 좋습니다. 또한, 결과가 QPixmap 에 캐시되는 경우와 같이, 비용이 많이 드는 연산을 사용해도 괜찮은 경우도 있습니다.

QPaintDevice, QPaintEngine, Qt SVG, 기본 드로잉 예제, Drawing Utility Functions 등을 참조하십시오.

멤버 유형 설명서

enum QPainter::CompositionMode

디지털 이미지 합성에 지원되는 모드를 정의합니다. 합성 모드는 한 이미지(소스)의 픽셀이 다른 이미지(대상)의 픽셀과 어떻게 병합될지 지정하는 데 사용됩니다.

RasterOp 접두사로 표시되는 비트 단위 래스터 연산 모드는 X11 및 래스터 페인트 엔진에서만 기본적으로 지원된다는 점에 유의하십시오. 즉, Mac에서 이러한 모드를 활용하는 유일한 방법은 QImage 를 사용하는 것입니다. RasterOp로 표시된 블렌드 모드는 알파 성분이 있는 펜 및 브러시에서는 지원되지 않습니다. 또한, ‘ QPainter::Antialiasing ’ 렌더링 힌트를 켜면 RasterOp 모드가 사실상 비활성화됩니다.

소스, 대상, 소스 오버, 대상 오버, 소스 인, 대상 인 합성 모드를 보여주는 그림

SourceOut, DestinationOut, SourceAtop, DestinationAtop, Clear 및 Xor 합성 모드를 보여주는 그림

가장 일반적인 유형은 SourceOver(흔히 단순히 알파 블렌딩이라고도 함)로, 소스 픽셀이 대상 픽셀 위에 블렌딩되며, 이때 소스의 알파 성분이 픽셀의 반투명도를 결정합니다.

일부 합성 모드는 효과를 내기 위해 소스 또는 대상 이미지에 알파 채널이 필요합니다. 최적의 성능을 위해서는 Format_ARGB32_Premultiplied 이미지 형식을 사용하는 것이 좋습니다.

합성 모드가 설정되면 모든 페인팅 연산자, 펜, 브러시, 그라데이션 및 픽스맵/이미지 그리기에 적용됩니다.

상수값설명
QPainter::CompositionMode_SourceOver0이 모드는 기본 모드입니다. 소스의 알파 값을 사용하여 픽셀을 대상 위에 블렌딩합니다.
QPainter::CompositionMode_DestinationOver1대상 픽셀의 알파 값을 사용하여 소스 픽셀 위에 블렌딩합니다. 이 모드는 CompositionMode_SourceOver의 반대입니다.
QPainter::CompositionMode_Clear2대상 영역의 픽셀은 소스 영역과 무관하게 지워집니다(완전히 투명하게 설정됨).
QPainter::CompositionMode_Source3출력값은 소스 픽셀입니다. (이는 기본적인 복사 작업을 의미하며, 소스 픽셀이 불투명할 때는 SourceOver와 동일합니다).
QPainter::CompositionMode_Destination4출력 결과는 대상 픽셀입니다. 즉, 블렌딩 효과가 없습니다. 이 모드는 CompositionMode_Source의 역모드입니다.
QPainter::CompositionMode_SourceIn5출력값은 소스 픽셀이며, 알파 값은 대상 픽셀의 알파 값만큼 감소됩니다.
QPainter::CompositionMode_DestinationIn6출력은 대상이며, 알파 값은 소스의 알파 값만큼 감소됩니다. 이 모드는 CompositionMode_SourceIn의 역모드입니다.
QPainter::CompositionMode_SourceOut7출력은 소스이며, 알파 값은 대상의 역수만큼 감소됩니다.
QPainter::CompositionMode_DestinationOut8출력은 대상 픽셀이며, 알파 값은 소스 픽셀의 알파 값의 역수로 감소됩니다. 이 모드는 CompositionMode_SourceOut의 역모드입니다.
QPainter::CompositionMode_SourceAtop9소스 픽셀이 대상 픽셀 위에 블렌딩되며, 소스 픽셀의 알파 값은 대상 픽셀의 알파 값만큼 감소합니다.
QPainter::CompositionMode_DestinationAtop10대상 픽셀이 소스 픽셀 위에 블렌딩되며, 대상 픽셀의 알파 값은 소스 픽셀의 알파 값만큼 감소됩니다. 이 모드는 CompositionMode_SourceAtop의 역모드입니다.
QPainter::CompositionMode_Xor11알파 값이 대상 픽셀의 알파 값의 역수로 감소된 소스 픽셀은, 알파 값이 소스 픽셀의 알파 값의 역수로 감소된 대상 픽셀과 병합됩니다. CompositionMode_Xor는 비트 단위 XOR과는 다릅니다.
QPainter::CompositionMode_Plus12소스 및 대상 픽셀의 알파와 색상이 모두 더해집니다.
QPainter::CompositionMode_Multiply13출력은 소스 색상에 대상 색상을 곱한 값입니다. 색상에 흰색을 곱하면 색상이 변하지 않는 반면, 색상에 검은색을 곱하면 검은색이 됩니다.
QPainter::CompositionMode_Screen14소스와 대상 색상이 반전된 후 곱해집니다. 색상을 흰색으로 스크리닝하면 흰색이 생성되는 반면, 색상을 검은색으로 스크리닝하면 색상이 변하지 않습니다.
QPainter::CompositionMode_Overlay15대상 색상에 따라 색상을 곱하거나 스크리닝합니다. 대상 색상은 대상의 밝기나 어두움을 반영하도록 소스 색상과 혼합됩니다.
QPainter::CompositionMode_Darken16원본 색상과 대상 색상 중 더 어두운 쪽이 선택됩니다.
QPainter::CompositionMode_Lighten17원본 색상과 대상 색상 중 더 밝은 쪽이 선택됩니다.
QPainter::CompositionMode_ColorDodge18목적지 색상이 원색을 반영하도록 밝아집니다. 원색이 검은색인 경우 목적지 색상은 변하지 않습니다.
QPainter::CompositionMode_ColorBurn19원색을 반영하여 결과색이 어두워집니다. 흰색 원색의 경우 결과색은 변하지 않습니다.
QPainter::CompositionMode_HardLight20원색에 따라 색상을 곱하거나 스크린 처리합니다. 밝은 원색은 대상 색상을 밝게 만들고, 어두운 원색은 대상 색상을 어둡게 만듭니다.
QPainter::CompositionMode_SoftLight21원본 색상에 따라 색상을 어둡게 하거나 밝게 만듭니다. CompositionMode_HardLight와 유사합니다.
QPainter::CompositionMode_Difference22더 어두운 색상을 더 밝은 색상에서 뺍니다. 흰색으로 칠하면 대상 색상이 반전되고, 검은색으로 칠하면 대상 색상은 변하지 않습니다.
QPainter::CompositionMode_Exclusion23CompositionMode_Difference와 유사하지만 대비가 더 낮습니다. 흰색으로 그리면 대상 색상이 반전되고, 검은색으로 그리면 대상 색상은 변하지 않습니다.
QPainter::RasterOp_SourceOrDestination24소스 및 대상 픽셀에 대해 비트별 OR 연산을 수행합니다(src OR dst).
QPainter::RasterOp_SourceAndDestination25소스 및 대상 픽셀에 대해 비트 단위 AND 연산을 수행합니다(src AND dst).
QPainter::RasterOp_SourceXorDestination26소스 및 대상 픽셀에 대해 비트별 XOR 연산을 수행합니다(src XOR dst).
QPainter::RasterOp_NotSourceAndNotDestination27소스 및 대상 픽셀에 대해 비트 단위 NOR 연산을 수행합니다 ((NOT src) AND (NOT dst)).
QPainter::RasterOp_NotSourceOrNotDestination28소스 및 대상 픽셀에 대해 비트 단위 NAND 연산을 수행합니다((NOT src) OR (NOT dst)).
QPainter::RasterOp_NotSourceXorDestination29소스 픽셀을 반전시킨 후 대상 픽셀과 XOR 연산을 수행하는 비트 단위 연산을 수행합니다((NOT src) XOR dst).
QPainter::RasterOp_NotSource30소스 픽셀을 반전시킨 후(NOT src) 비트 단위 연산을 수행합니다.
QPainter::RasterOp_NotSourceAndDestination31소스를 반전시킨 다음 대상과 AND 연산을 수행하는 비트 단위 연산을 수행합니다((NOT src) AND dst).
QPainter::RasterOp_SourceAndNotDestination32소스 픽셀을 반전된 대상 픽셀과 AND 연산하는 비트 단위 연산을 수행합니다 (src AND (NOT dst)).
QPainter::RasterOp_NotSourceOrDestination33소스를 반전시킨 다음 대상과 OR 연산을 수행하는 비트 단위 연산을 수행합니다((NOT src) OR dst).
QPainter::RasterOp_ClearDestination35소스와는 별개로 대상의 픽셀이 지워집니다(0으로 설정됨).
QPainter::RasterOp_SetDestination36소스와 관계없이 대상의 픽셀이 설정됩니다(1로 설정됨).
QPainter::RasterOp_NotDestination37대상 픽셀을 반전(NOT dst)하는 비트 연산을 수행합니다.
QPainter::RasterOp_SourceOrNotDestination34소스와 반전된 대상 픽셀을 OR 연산하는 비트 연산을 수행합니다(src OR (NOT dst)).

compositionMode(), setCompositionMode(), Composition Modes 및 이미지 합성 예제도참조하십시오 .

enum QPainter::PixmapFragmentHint
flags QPainter::PixmapFragmentHints

상수값설명
QPainter::OpaqueHint0x01그려질 픽스맵 프래그먼트가 불투명함을 나타냅니다. 불투명한 프래그먼트는 렌더링 속도가 더 빠를 수 있습니다.

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

QPainter::drawPixmapFragments() 및 QPainter::PixmapFragment도 참조하십시오 .

enum QPainter::RenderHint
flags QPainter::RenderHints

렌더 힌트는 QPainter 에 전달할 플래그를 지정하는 데 사용되며, 해당 플래그는 특정 엔진에 따라 적용될 수도 있고 적용되지 않을 수도 있습니다.

상수값설명
QPainter::Antialiasing0x01가능한 경우 엔진이 프리미티브의 모서리에 앤티앨리어싱을 적용해야 함을 나타냅니다.
QPainter::TextAntialiasing0x02가능한 경우 엔진이 텍스트에 앤티앨리어싱을 적용해야 함을 나타냅니다. 텍스트에 대한 앤티앨리어싱을 강제로 비활성화하려면 이 힌트를 사용하지 마십시오. 대신, 글꼴의 스타일 전략에서 QFont::NoAntialias 를 설정하십시오.
QPainter::SmoothPixmapTransform0x04엔진이 가장 가까운 이웃(nearest neighbor) 방식 대신 부드러운 픽스맵 변환 알고리즘(예: 쌍선형)을 사용해야 함을 나타냅니다.
QPainter::VerticalSubpixelPositioning0x08글꼴 엔진에서 지원하는 경우, 텍스트를 가로뿐만 아니라 세로 방향으로도 픽셀의 분수 단위로 배치할 수 있도록 합니다. 현재 이 기능은 힌팅 기본 설정이 ` QFont::PreferNoHinting`인 경우 모든 플랫폼의 Freetype에서 지원되며, macOS에서도 지원됩니다. 대부분의 사용 사례에서 이 기능은 시각적 품질을 향상시키지 않지만, 메모리 소비를 증가시키고 텍스트 렌더링 성능을 다소 저하시킬 수 있습니다. 따라서 사용 사례에서 반드시 필요한 경우가 아니라면 이 기능을 활성화하지 않는 것이 좋습니다. 글리프를 다른 시각적 기본 요소와 정렬하는 것이 그러한 사용 사례 중 하나일 수 있습니다. 이 값은 Qt 6.1에 추가되었습니다.
QPainter::LosslessImageRendering0x40가능한 한 무손실 이미지 렌더링을 사용하십시오. 현재 이 힌트는 ` QPainter `가 ` QPrinter ` 또는 ` QPdfWriter`를 통해 PDF 파일을 출력할 때만 사용되며, 이때 ` drawImage()/drawPixmap()` 호출은 손실성 JPEG 압축 대신 무손실 압축 알고리즘을 사용하여 이미지를 인코딩합니다. 이 값은 Qt 5.13에 추가되었습니다.
QPainter::NonCosmeticBrushPatterns0x80사전 정의된 패턴 스타일 중 하나를 사용하는 브러시로 그리기 시, 그려지는 객체와 함께 패턴도 변환합니다. 기본값은 패턴을 장식용으로 취급하여, 활성화된 변환과 무관하게 패턴 픽셀이 장치 픽셀에 직접 매핑되도록 합니다. 이 값은 Qt 6.4에서 추가되었습니다.

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

renderHints(), setRenderHint() 및 Rendering Quality도 참조하십시오 .

멤버 함수 문서

QPainter::QPainter()

페인터를 생성합니다.

begin() 및 end()도 참조하십시오 .

[explicit] QPainter::QPainter(QPaintDevice *device)

device 의 페인팅을 즉시 시작하는 페인터를 생성합니다.

이 생성자는 QWidget::paintEvent()과 같이 수명이 짧은 페인터에 유용하며, 한 번만 사용해야 합니다. 이 생성자는 begin()을 자동으로 호출하며, QPainter의 소멸자는 end()을 자동으로 호출합니다.

다음은 begin()과 end()을 사용한 예제입니다:

void MyWidget::paintEvent(QPaintEvent *)
{
    QPainter p;
    p.begin(this);
    p.drawLine(drawingCode);        // drawing code
    p.end();
}

이 생성자를 사용한 동일한 예제:

void MyWidget::paintEvent(QPaintEvent *)
{
    QPainter p(this);
    p.drawLine(drawingCode);        // drawing code
}

생성자는 페인터 초기화가 실패했을 때 피드백을 제공할 수 없으므로, 프린터와 같은 외부 장치에 그리기 위해서는 begin() 및 end()을 사용하는 것이 좋습니다.

begin() 및 end()도 참조하십시오 .

[noexcept] QPainter::~QPainter()

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

const QBrush &QPainter::background() const

현재 배경 브러시를 반환합니다.

setBackground() 및 Settings도 참조하십시오 .

Qt::BGMode QPainter::backgroundMode() const

현재 배경 모드를 반환합니다.

setBackgroundMode() 및 Settings도 참조하십시오 .

bool QPainter::begin(QPaintDevice *device)

device 페인팅을 시작하며, 성공하면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.

begin()이 호출되면 모든 페인터 설정(setPen(), setBrush() 등)이 기본값으로 재설정된다는 점에 유의하십시오.

발생할 수 있는 오류는 다음과 같은 심각한 문제들입니다:

painter->begin(nullptr); // impossible - paint device cannot be null

QPixmap image(0, 0);
painter->begin(&image); // impossible - image.isNull() == true;

painter->begin(myWidget);
painter2->begin(myWidget); // impossible - only one painter at a time

대부분의 경우 begin() 대신 생성자 중 하나를 사용할 수 있으며, end()는 소멸 시 자동으로 수행된다는 점에 유의하십시오.

경고: 페인트장치는 한 번에 하나의 페인터에 의해서만 페인팅될 수 있습니다.

경고: QImage::Format_Indexed8 형식의 QImage 에 대한페인팅은 지원되지 않습니다.

end() 및 QPainter()도 참조하십시오 .

void QPainter::beginNativePainting()

페인팅 파이프라인을 플러시하고, 사용자가 기본 그래픽 컨텍스트에 직접 명령을 내릴 수 있도록 준비합니다. 반드시 그 다음에 ` endNativePainting()`를 호출해야 합니다.

기본 페인트 엔진이 변경한 상태만 해당 기본 상태로 재설정된다는 점에 유의하십시오. 재설정되는 상태는 릴리스마다 달라질 수 있습니다. 현재 OpenGL 2 엔진에서는 다음 상태가 재설정됩니다:

  • 블렌딩이 비활성화됩니다
  • 깊이, 스텐실 및 시저 테스트가 비활성화됩니다
  • 활성 텍스처 유닛이 0으로 재설정됩니다
  • 깊이 마스크, 깊이 함수 및 클리어 깊이가 기본값으로 재설정됩니다
  • 스텐실 마스크, 스텐실 연산 및 스텐실 함수가 기본값으로 재설정됩니다
  • 현재 색상이 순백색으로 재설정됩니다

예를 들어, 사용자가 beginNativePaint()/endNativePainting() 블록 내에서 OpenGL 폴리곤 모드를 변경한 경우, endNativePainting()에 의해 기본 상태로 재설정되지 않습니다. 다음은 페인터 명령과 원시 OpenGL 명령이 혼합된 예시입니다:

QPainter painter(this);
painter.fillRect(0, 0, 128, 128, Qt::green);
painter.beginNativePainting();

glEnable(GL_SCISSOR_TEST);
glScissor(0, 0, 64, 64);

glClearColor(1, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);

glDisable(GL_SCISSOR_TEST);

painter.endNativePainting();

endNativePainting()도 참조하십시오 .

QRectF QPainter::boundingRect(const QRectF &rectangle, int flags, const QString &text)

text 의 경계 사각형을 반환합니다. 이 경계 사각형은 현재 설정된 font()을 사용하여, 지정된 flags 와 함께 주어진 rectangle 내부에 그려졌을 때의 모습을 나타냅니다. 즉, 이 함수는 동일한 인자가 주어졌을 때 drawText() 함수가 어디에 그릴지를 알려줍니다.

text 가 지정된 flags 를 사용하여 주어진 rectangle 내에 들어맞지 않는 경우, 이 함수는 필요한 사각형을 반환합니다.

flags 인수는 다음 플래그들의 비트별 OR 연산 결과입니다:

수평 정렬 플래그 중 여러 개 또는 수직 정렬 플래그 중 여러 개가 설정된 경우, 결과 정렬은 정의되지 않습니다.

drawText(), Qt::Alignment 및 Qt::TextFlag도 참조하십시오 .

QRect QPainter::boundingRect(const QRect &rectangle, int flags, const QString &text)

현재 설정된 font()을 사용하여, 지정된 rectangle 내에서 지정된 flags 을 적용해 그려졌을 때의 text 의 경계 사각형을 반환합니다.

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

QRectF QPainter::boundingRect(const QRectF &rectangle, const QString &text, const QTextOption &option = QTextOption())

Qt::AlignmentFlag 와 Qt::TextFlag 의 비트별 OR 연산으로 플래그를 지정하는 대신, 이 오버로드된 함수는 option 인자를 받습니다. QTextOption 클래스는 일반적인 서식 있는 텍스트 속성에 대한 설명을 제공합니다.

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

QTextOption도 참조하십시오 .

QRect QPainter::boundingRect(int x, int y, int w, int h, int flags, const QString &text)

주어진 ` text `의 경계 사각형을 반환하며, 이는 (x, y) 지점을 기점으로 하고, 너비 w, 높이 h 인 사각형 내부에 그려졌을 때의 모습을 나타냅니다.

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

const QBrush &QPainter::brush() const

화가의 현재 브러시를 반환합니다.

QPainter::setBrush() 및 Settings도 참조하십시오 .

QPoint QPainter::brushOrigin() const

현재 브러시의 원점을 반환합니다. 정확한 원점을 얻으려면 QPainter::brushOriginF()을 사용하는 것이 좋습니다.

setBrushOrigin() 및 Settings도 참조하십시오 .

[since 6.11] QPointF QPainter::brushOriginF() const

현재 브러시 원점을 반환합니다.

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

setBrushOrigin() 및 Settings도 참조하십시오 .

QRectF QPainter::clipBoundingRect() const

클립이 있는 경우 현재 클립의 경계 사각형을 반환하고, 그렇지 않은 경우 빈 사각형을 반환합니다. 클립 영역은 논리 좌표로 지정된다는 점에 유의하십시오.

경계 사각형이 클립 영역을 꼭 끼워 맞출 것이라고 보장되지는 않습니다.

setClipRect(), setClipPath(), setClipRegion()도 참조하십시오 .

QPainterPath QPainter::clipPath() const

현재 클립 경로를 논리 좌표로 반환합니다.

경고: ` QPainter `는 결합된 클립을 명시적으로 저장하지 않습니다. 이는 기본이 되는 ` QPaintEngine`에서 처리되므로, 경로는 필요에 따라 재구성되어 현재의 논리 좌표계로 변환됩니다. 이는 잠재적으로 비용이 많이 드는 작업일 수 있습니다.

setClipPath(), clipRegion() 및 setClipping()도 참조하십시오 .

QRegion QPainter::clipRegion() const

현재 설정된 클립 영역을 반환합니다. 클립 영역은 논리 좌표로 지정된다는 점에 유의하십시오.

경고: ` QPainter `는 결합된 클립을 명시적으로 저장하지 않습니다. 이는 기본이 되는 ` QPaintEngine`에서 처리되므로, 경로는 필요에 따라 재구성되어 현재의 논리 좌표계로 변환됩니다. 이는 잠재적으로 많은 자원을 소모하는 작업일 수 있습니다.

setClipRegion(), clipPath(), setClipping()도 참조하십시오 .

QTransform QPainter::combinedTransform() const

현재 창/뷰포트와 월드 변환을 결합한 변환 행렬을 반환합니다.

setWorldTransform(), setWindow() 및 setViewport()도 참조하십시오 .

QPainter::CompositionMode QPainter::compositionMode() const

현재의 합성 모드를 반환합니다.

CompositionMode 및 setCompositionMode()도 참조하십시오 .

QPaintDevice *QPainter::device() const

이 페인터가 현재 그리기를 수행 중인 페인트 디바이스를 반환하거나, 페인터가 비활성 상태인 경우 ` nullptr `를 반환합니다.

isActive()도 참조하십시오 .

const QTransform &QPainter::deviceTransform() const

논리 좌표를 플랫폼 종속 페인트 장치의 장치 좌표로 변환하는 행렬을 반환합니다.

이 함수는 플랫폼 종속 핸들(Qt::HANDLE)에서 플랫폼 페인팅 명령을 사용할 때, 그리고 플랫폼이 기본적으로 변환을 수행하지 않는 경우에만 필요합니다.

QPaintEngine::PaintEngineFeature 열거형을 조회하여 플랫폼이 변환을 수행하는지 여부를 확인할 수 있습니다.

worldTransform() 및 QPaintEngine::hasFeature()도 참조하십시오 .

void QPainter::drawArc(const QRectF &rectangle, int startAngle, int spanAngle)

주어진 rectangle, startAngle 및 spanAngle 로 정의된 호를 그립니다.

startAngle 와 spanAngle 는 1/16도 단위로 지정해야 하며, 즉 한 바퀴는 5760(16 × 360)에 해당합니다. 각도가 양수이면 시계 반대 방향, 음수이면 시계 방향을 의미합니다. 0도는 3시 방향에 위치합니다. rectangle 가 정사각형이 아닌 경우, 각도는 편심각(eccentric angles)이며, Arcs and Ellipses 에 설명된 대로 직사각형의 중심을 기준으로 한 방향을 측정하지 않습니다.

아크 곡선
QRectF rectangle(10.0, 20.0, 80.0, 60.0);
int startAngle = 30 * 16;
int spanAngle = 120 * 16;

QPainter painter(this);
painter.drawArc(rectangle, startAngle, spanAngle);

drawPie(), drawChord() 및 좌표계 항목도참조하십시오 .

void QPainter::drawArc(const QRect &rectangle, int startAngle, int spanAngle)

주어진 rectangle, startAngle 및 spanAngle 로 정의된 호를 그립니다.

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

void QPainter::drawArc(int x, int y, int width, int height, int startAngle, int spanAngle)

(x, y)에서 시작하는 직사각형으로 정의된 호를, 지정된 width 및 height 와 주어진 startAngle 및 spanAngle 를 사용하여 그립니다.

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

void QPainter::drawChord(const QRectF &rectangle, int startAngle, int spanAngle)

주어진 rectangle, startAngle 및 spanAngle 로 정의된 현을 그립니다. 현은 현재 brush() 값으로 채워집니다.

startAngle과 spanAngle은 1/16도 단위로 지정해야 합니다. 즉, 한 바퀴는 5760(16 × 360)에 해당합니다. 각도가 양수이면 시계 반대 방향, 음수이면 시계 방향입니다. 0도는 3시 방향에 해당합니다. rectangle 가 정사각형이 아닌 경우, 각도는 편심각(eccentric angles)이 되며, Arcs and Ellipses 에 설명된 대로 직사각형의 중심을 기준으로 한 방향을 측정하지 않습니다.

코드 형태
QRectF rectangle(10.0, 20.0, 80.0, 60.0);
int startAngle = 30 * 16;
int spanAngle = 120 * 16;

QPainter painter(this);
painter.drawChord(rect, startAngle, spanAngle);

drawArc(), drawPie() 및 좌표계 항목도참조하십시오 .

void QPainter::drawChord(const QRect &rectangle, int startAngle, int spanAngle)

주어진 rectangle, startAngle 및 spanAngle 로 정의된 현을 그립니다.

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

void QPainter::drawChord(int x, int y, int width, int height, int startAngle, int spanAngle)

(x, y)에서 시작하는 사각형으로 정의된 현을, 지정된 width 및 height 와 주어진 startAngle 및 spanAngle 를 사용하여 그립니다.

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

void QPainter::drawConvexPolygon(const QPointF *points, int pointCount)

배열 points 의 첫 번째 pointCount 개 점으로 정의된 볼록 다각형을 현재 펜을 사용하여 그립니다.

사각형
static const QPointF points[4] = {
    QPointF(10.0, 80.0),
    QPointF(20.0, 10.0),
    QPointF(80.0, 30.0),
    QPointF(90.0, 70.0)
};

QPainter painter(this);
painter.drawConvexPolygon(points, 4);

첫 번째 점은 암묵적으로 마지막 점과 연결되며, 다각형은 현재 brush()로 채워집니다. 제공된 다각형이 볼록하지 않은 경우, 즉 180도보다 큰 각도가 하나 이상 포함된 경우, 결과는 정의되지 않습니다.

일부 플랫폼(예: X11)에서는 drawConvexPolygon() 함수가 drawPolygon() 함수보다 더 빠를 수 있습니다.

drawPolygon(), drawPolyline() 및 좌표계 항목도참조하십시오 .

void QPainter::drawConvexPolygon(const QPolygon &polygon)

polygon 로 정의된 볼록 다각형을 현재 펜과 브러시를 사용하여 그립니다.

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

void QPainter::drawConvexPolygon(const QPolygonF &polygon)

polygon 로 정의된 볼록 다각형을 현재 펜과 브러시를 사용하여 그립니다.

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

void QPainter::drawConvexPolygon(const QPoint *points, int pointCount)

배열 ` points `의 첫 번째 ` pointCount `개 점으로 정의된 볼록 다각형을 현재 펜을 사용하여 그립니다.

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

void QPainter::drawEllipse(const QRectF &rectangle)

주어진 rectangle 로 정의된 타원을 그립니다.

채워진 타원의 크기는 rectangle 입니다.size(). 선으로 그려진 타원의 크기는 rectangle 입니다.size()에 펜 너비를 더한 값입니다.

타원 윤곽선
QRectF rectangle(10.0, 20.0, 80.0, 60.0);

QPainter painter(this);
painter.drawEllipse(rectangle);

drawPie() 및 좌표계 항목도 참조하십시오 .

void QPainter::drawEllipse(const QRect &rectangle)

주어진 좌표 ( rectangle)로 정의된 타원을 그립니다.

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

void QPainter::drawEllipse(const QPoint &center, int rx, int ry)

center 에 위치한, 반지름이 rx 및 ry 인 타원을 그립니다.

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

void QPainter::drawEllipse(const QPointF &center, qreal rx, qreal ry)

center 에 위치한, 반지름이 rx 및 ry 인 타원을 그립니다.

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

void QPainter::drawEllipse(int x, int y, int width, int height)

(x, y)에서 시작하는 직사각형으로 정의된 타원을, 주어진 width 및 height 을 사용하여 그립니다.

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

void QPainter::drawGlyphRun(const QPointF &position, const QGlyphRun &glyphs)

position 에 있는 glyphs 로 표시된 글리프를 그립니다. position 는 글리프 문자열의 기준선 가장자리를 나타냅니다. 글리프는 glyphs 에서 선택된 글꼴에서, glyphs 에 명시된 위치에 해당하는 오프셋을 기준으로 가져옵니다.

QGlyphRun::setRawFont(), QGlyphRun::setPositions(), QGlyphRun::setGlyphIndexes()도 참조하십시오 .

void QPainter::drawImage(const QRectF &target, const QImage &image, const QRectF &source, Qt::ImageConversionFlags flags = Qt::AutoColor)

주어진 image 의 직사각형 부분 source 을 페인트 장치의 target 사각형 내에 그립니다.

참고: 이미지와 사각형의 크기가 서로 다를 경우,이미지가 사각형에 맞도록 크기가 조정됩니다.

참고: QImage::devicePixelRatio() 함수가 이에 어떤 영향을 미치는지에 대해서는 Drawing High Resolution Versions of Pixmaps and Images 를참조하십시오 .

이미지를 더 낮은 해상도의 결과물에 맞추기 위해 수정해야 하는 경우(예: 32비트에서 8비트로 변환), flags 를 사용하여 원하는 처리 방식을 지정하십시오.

QRectF target(10.0, 20.0, 80.0, 60.0);
QRectF source(0.0, 0.0, 70.0, 40.0);
QImage image(":/images/myImage.png");

QPainter painter(this);
painter.drawImage(target, image, source);

drawPixmap() 및 QImage::devicePixelRatio()도 참조하십시오 .

void QPainter::drawImage(const QPoint &point, const QImage &image)

지정된 image 를 지정된 point 에 그립니다.

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

void QPainter::drawImage(const QPointF &point, const QImage &image)

지정된 image 를 지정된 point 에 그립니다.

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

void QPainter::drawImage(const QRect &rectangle, const QImage &image)

지정된 ` image `를 지정된 ` rectangle`에 그립니다.

참고: 이미지와 사각형의 크기가 서로 다를 경우,이미지가 사각형에 맞도록 크기가 조정됩니다.

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

void QPainter::drawImage(const QRectF &rectangle, const QImage &image)

지정된 ` image `를 지정된 ` rectangle`에 그립니다.

참고: 이미지와 사각형의 크기가 서로 다를 경우,이미지가 사각형 크기에 맞게 크기가 조정됩니다.

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

void QPainter::drawImage(const QPoint &point, const QImage &image, const QRect &source, Qt::ImageConversionFlags flags = Qt::AutoColor)

주어진 image 의 직사각형 부분 source 을, 주어진 point 를 원점으로 하여 그립니다.

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

void QPainter::drawImage(const QPointF &point, const QImage &image, const QRectF &source, Qt::ImageConversionFlags flags = Qt::AutoColor)

주어진 image 의 직사각형 부분 source 을, 주어진 point 를 원점으로 하여 그립니다.

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

void QPainter::drawImage(const QRect &target, const QImage &image, const QRect &source, Qt::ImageConversionFlags flags = Qt::AutoColor)

주어진 image 의 직사각형 부분 source 을 페인트 장치의 target 직사각형 내에 그립니다.

참고: 이미지와 사각형의 크기가 서로 다를 경우,이미지는 사각형에 맞도록 크기가 조정됩니다.

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

void QPainter::drawImage(int x, int y, const QImage &image, int sx = 0, int sy = 0, int sw = -1, int sh = -1, Qt::ImageConversionFlags flags = Qt::AutoColor)

image 의 일부를 페인트 장치로 복사하여 (x, y) 위치에 이미지를 그립니다.

(x, y)는 그리기 대상인 페인트 장치의 왼쪽 상단 점을 지정합니다. (sx, sy)는 그리기 대상인 image 의 왼쪽 상단 점을 지정합니다. 기본값은 (0, 0)입니다.

(sw, sh)는 그려질 이미지의 크기를 지정합니다. 기본값인 (0, 0)(및 음수 값)은 이미지의 오른쪽 하단 끝까지를 의미합니다.

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

void QPainter::drawLine(const QLineF &line)

line 로 정의된 선을 그립니다.

대각선
QLineF line(10.0, 80.0, 90.0, 20.0);

QPainter painter(this);
painter.drawLine(line);

drawLines(), drawPolyline() 및 좌표계 항목도참조하십시오 .

void QPainter::drawLine(const QLine &line)

line 로 정의된 선을 그립니다.

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

void QPainter::drawLine(const QPoint &p1, const QPoint &p2)

p1 에서 p2 까지 선을 그립니다.

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

void QPainter::drawLine(const QPointF &p1, const QPointF &p2)

p1 에서 p2 까지 선을 그립니다.

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

void QPainter::drawLine(int x1, int y1, int x2, int y2)

(x1, y1)에서 (x2, y2)까지 선을 그립니다.

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

void QPainter::drawLines(const QLineF *lines, int lineCount)

현재 펜을 사용하여 배열 lines 에 첫 번째 lineCount 선을 그립니다.

drawLine() 및 drawPolyline()도 참조하십시오 .

void QPainter::drawLines(const QList<QLine> &lines)

lines 목록으로 정의된 선 집합을 현재 펜과 브러시를 사용하여 그립니다.

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

void QPainter::drawLines(const QList<QLineF> &lines)

lines 목록으로 정의된 선 집합을 현재 펜과 브러시를 사용하여 그립니다.

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

void QPainter::drawLines(const QList<QPoint> &pointPairs)

pointPairs 벡터에 포함된 각 점 쌍에 대해 현재 펜을 사용하여 선을 그립니다.

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

void QPainter::drawLines(const QList<QPointF> &pointPairs)

pointPairs 벡터에 포함된 각 점 쌍에 대해 현재 펜을 사용하여 선을 그립니다. 배열에 점의 개수가 홀수인 경우, 마지막 점은 무시됩니다.

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

void QPainter::drawLines(const QLine *lines, int lineCount)

현재 펜을 사용하여 배열 lines 에 첫 번째 lineCount 줄을 그립니다.

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

void QPainter::drawLines(const QPoint *pointPairs, int lineCount)

현재 펜을 사용하여 배열 pointPairs 에 첫 번째 lineCount 줄을 그립니다.

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

void QPainter::drawLines(const QPointF *pointPairs, int lineCount)

현재 펜을 사용하여 배열 ` pointPairs `에 첫 번째 ` lineCount `개의 선을 그립니다. 선은 점의 쌍으로 지정되므로, ` pointPairs `의 요소 수는 최소한 ` lineCount ` * 2개 이상이어야 합니다.

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

void QPainter::drawPath(const QPainterPath &path)

지정된 페인터 path 를 그리며, 윤곽선에는 현재 펜을, 채우기에는 현재 브러시를 사용합니다.

베지어 곡선 경로
QPainterPath path;
path.moveTo(20, 80);
path.lineTo(20, 30);
path.cubicTo(80, 0, 50, 50, 80, 80);

QPainter painter(this);
painter.drawPath(path);

'Painter Paths' 예제와 'Vector Deformation' 예제도참조하십시오 .

void QPainter::drawPicture(const QPointF &point, const QPicture &picture)

지정된 picture 를 지정된 point 에서 다시 재생합니다.

QPicture 클래스는 QPainter 명령을 기록하고 재생하는 페인트 장치입니다. Picture는 페인터 명령을 플랫폼에 독립적인 형식으로 IO 장치에 직렬화합니다. 위젯이나 픽스맵에 그릴 수 있는 모든 것은 Picture에도 저장할 수 있습니다.

이 함수는 point = QPointF(0, 0)으로 호출될 때 QPicture::play()과 정확히 동일한 동작을 수행합니다.

참고: 이 함수는 페인터의상태를 유지합니다.

QPicture picture;
QPointF point(10.0, 20.0);
picture.load("drawing.pic");

QPainter painter(this);
painter.drawPicture(0, 0, picture);

QPicture::play()도 참조하십시오 .

void QPainter::drawPicture(const QPoint &point, const QPicture &picture)

지정된 picture 를 지정된 point 에서 재생합니다.

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

void QPainter::drawPicture(int x, int y, const QPicture &picture)

주어진 picture 를 점 (x, y)에 그립니다.

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

void QPainter::drawPie(const QRectF &rectangle, int startAngle, int spanAngle)

주어진 rectangle, startAngle 및 spanAngle 로 정의된 파이 차트를 그립니다.

파이 차트는 현재 brush() 값으로 채워집니다.

startAngle과 spanAngle은 1/16도 단위로 지정해야 합니다. 즉, 한 바퀴는 5760(16 × 360)에 해당합니다. 각도의 양수 값은 시계 반대 방향을, 음수 값은 시계 방향이 됩니다. 0도는 3시 방향에 해당합니다. rectangle 가 정사각형이 아닌 경우, 각도는 편심각(eccentric angles)이 되며, Arcs and Ellipses 에 설명된 바와 같이 직사각형의 중심을 기준으로 한 방향을 측정하지 않습니다.

파이 한 조각 모양
QRectF rectangle(10.0, 20.0, 80.0, 60.0);
int startAngle = 30 * 16;
int spanAngle = 120 * 16;

QPainter painter(this);
painter.drawPie(rectangle, startAngle, spanAngle);

drawEllipse(), drawChord() 및 좌표계 항목도참조하십시오 .

void QPainter::drawPie(const QRect &rectangle, int startAngle, int spanAngle)

주어진 rectangle, startAngle 및 spanAngle 로 정의된 파이 차트를 그립니다.

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

void QPainter::drawPie(int x, int y, int width, int height, int startAngle, int spanAngle)

(x, y)에서 시작하는 직사각형으로 정의된 파이 차트를, 지정된 width 및 height 와 함께, 주어진 startAngle 및 spanAngle 를 사용하여 그립니다.

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

void QPainter::drawPixmap(const QRectF &target, const QPixmap &pixmap, const QRectF &source)

주어진 pixmap 의 직사각형 영역 source 을 페인트 장치의 주어진 target 에 그립니다.

참고: 픽스맵과 사각형의 크기가 일치하지 않는 경우,픽스맵은 사각형에 맞도록 크기가 조정됩니다.

참고: 이 동작이 QPixmap::devicePixelRatio()에 의해 어떻게 영향을 받는지에 대해서는 Drawing High Resolution Versions of Pixmaps and Images 를참조하십시오 .

QRectF target(10.0, 20.0, 80.0, 60.0);
QRectF source(0.0, 0.0, 70.0, 40.0);
QPixmap pixmap(":myPixmap.png");

QPainter painter(this);
painter.drawPixmap(target, pixmap, source);

pixmap 가 QBitmap 인 경우, 펜의 색상을 사용하여 “설정된” 비트만 그려집니다. backgroundMode 가 Qt::OpaqueMode 인 경우, “설정되지 않은” 비트는 배경 브러시의 색상으로 그려지며, backgroundMode 가 Qt::TransparentMode 인 경우, “설정되지 않은” 비트는 투명하게 처리됩니다. 그라데이션이나 텍스처 색상을 사용한 비트맵 그리기는 지원되지 않습니다.

drawImage() 및 QPixmap::devicePixelRatio()도 참조하십시오 .

void QPainter::drawPixmap(const QPoint &point, const QPixmap &pixmap)

지정된 pixmap 를, 원점을 지정된 point 로 하여 그립니다.

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

void QPainter::drawPixmap(const QPointF &point, const QPixmap &pixmap)

지정된 pixmap 를 지정된 point 를 원점으로 하여 그립니다.

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

void QPainter::drawPixmap(const QRect &rectangle, const QPixmap &pixmap)

지정된 pixmap 을 지정된 rectangle 에 그립니다.

참고: 픽스맵과 사각형의 크기가 일치하지 않을 경우,픽스맵은 사각형에 맞게 크기가 조정됩니다.

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

void QPainter::drawPixmap(const QPoint &point, const QPixmap &pixmap, const QRect &source)

주어진 pixmap 의 직사각형 부분 source 을, 주어진 point 를 원점으로 하여 그립니다.

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

void QPainter::drawPixmap(const QPointF &point, const QPixmap &pixmap, const QRectF &source)

주어진 pixmap 의 직사각형 영역 source 을, 주어진 point 를 원점으로 하여 그립니다.

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

void QPainter::drawPixmap(const QRect &target, const QPixmap &pixmap, const QRect &source)

지정된 pixmap 의 직사각형 영역 source 을 페인트 장치의 지정된 target 에 그립니다.

참고: 픽스맵과 사각형의 크기가 일치하지 않는 경우,픽스맵은 사각형에 맞도록 크기가 조정됩니다.

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

void QPainter::drawPixmap(int x, int y, const QPixmap &pixmap)

지정된 pixmap 를 (x, y) 위치에 그립니다.

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

void QPainter::drawPixmap(int x, int y, int width, int height, const QPixmap &pixmap)

pixmap 를 (x, y) 위치의 사각형 안에, 주어진 width 및 height 를 사용하여 그립니다.

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

void QPainter::drawPixmap(int x, int y, const QPixmap &pixmap, int sx, int sy, int sw, int sh)

주어진 pixmap 의 일부를 페인트 장치로 복사하여 (x, y) 위치에 픽스맵을 그립니다.

(x, y)는 그리기 대상인 페인트 장치의 왼쪽 상단 점을 지정합니다. (sx, sy)는 그리기 대상인 pixmap 의 왼쪽 상단 점을 지정합니다. 기본값은 (0, 0)입니다.

(sw, sh)는 그려질 픽스맵의 크기를 지정합니다. 기본값인 (0, 0) (및 음수)는 픽스맵의 오른쪽 아래 끝까지를 의미합니다.

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

void QPainter::drawPixmap(int x, int y, int w, int h, const QPixmap &pixmap, int sx, int sy, int sw, int sh)

주어진 픽스맵 pixmap 의 원점 (sx, sy), 너비 sw, 높이 sh 을 갖는 직사각형 영역을 (x, y) 지점에 너비 w, 높이 h 으로 그립니다. sw 또는 sh가 0인 경우 픽스맵의 너비/높이가 사용되며, 오프셋 sx/sy에 따라 조정됩니다.

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

void QPainter::drawPixmapFragments(const QPainter::PixmapFragment *fragments, int fragmentCount, const QPixmap &pixmap, QPainter::PixmapFragmentHints hints = PixmapFragmentHints())

이 함수는 pixmap 또는 pixmap 의 부분 사각형을 서로 다른 배율, 회전 및 불투명도로 여러 위치에 그리는 데 사용됩니다. fragments 는 각 픽스맵 조각을 그리는 데 사용되는 매개변수를 지정하는 fragmentCount 요소로 구성된 배열입니다. hints 매개변수를 사용하여 그리기 힌트를 전달할 수 있습니다.

이 함수는 백엔드가 상태 변경을 최적화할 수 있으므로, drawPixmap()를 여러 번 호출하는 것보다 잠재적으로 더 빠를 수 있습니다.

QPainter::PixmapFragment 및 QPainter::PixmapFragmentHint도 참조하십시오 .

void QPainter::drawPoint(const QPointF &position)

지정된 좌표 position 에 현재 펜의 색상을 사용하여 단일 점을 그립니다.

'좌표계'항목도 참조하십시오 .

void QPainter::drawPoint(const QPoint &position)

지정된 좌표 ( position )에 현재 펜의 색상을 사용하여 점 하나를 그립니다.

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

void QPainter::drawPoint(int x, int y)

(x, y) 위치에 점 하나를 그립니다.

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

void QPainter::drawPoints(const QPointF *points, int pointCount)

배열 points 에 있는 첫 번째 pointCount 개의 점을 현재 펜의 색상으로 그립니다.

'좌표계'항목도 참조하십시오 .

void QPainter::drawPoints(const QPolygon &points)

벡터 ` points`에 포함된 점들을 그립니다.

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

void QPainter::drawPoints(const QPolygonF &points)

벡터 ` points`에 포함된 점들을 그립니다.

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

void QPainter::drawPoints(const QPoint *points, int pointCount)

현재 펜의 색상을 사용하여 배열 points 에 있는 첫 번째 pointCount 개의 점을 그립니다.

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

void QPainter::drawPolygon(const QPointF *points, int pointCount, Qt::FillRule fillRule = Qt::OddEvenFill)

배열 ` points `의 첫 번째 ` pointCount ` 개 점으로 정의된 다각형을 현재 펜과 브러시를 사용하여 그립니다.

사각형
static const QPointF points[4] = {
    QPointF(10.0, 80.0),
    QPointF(20.0, 10.0),
    QPointF(80.0, 30.0),
    QPointF(90.0, 70.0)
};

QPainter painter(this);
painter.drawPolygon(points, 4);

첫 번째 점은 암시적으로 마지막 점과 연결되며, 다각형은 현재 brush()로 채워집니다.

fillRule 가 Qt::WindingFill 인 경우, 다각형은 와인딩 채우기 알고리즘을 사용하여 채워집니다. fillRule 가 Qt::OddEvenFill 인 경우, 다각형은 홀수-짝수 채우기 알고리즘을 사용하여 채워집니다. 이러한 채우기 규칙에 대한 자세한 설명은 Qt::FillRule 를 참조하십시오.

drawConvexPolygon(), drawPolyline() 및 좌표계( Coordinate System)항목도 참조하십시오 .

void QPainter::drawPolygon(const QPolygon &points, Qt::FillRule fillRule = Qt::OddEvenFill)

주어진 points 로 정의된 다각형을 채우기 규칙 fillRule 을 사용하여 그립니다.

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

void QPainter::drawPolygon(const QPolygonF &points, Qt::FillRule fillRule = Qt::OddEvenFill)

주어진 points 로 정의된 다각형을 채우기 규칙 fillRule 을 사용하여 그립니다.

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

void QPainter::drawPolygon(const QPoint *points, int pointCount, Qt::FillRule fillRule = Qt::OddEvenFill)

배열 points 의 첫 번째 pointCount 개 점으로 정의된 다각형을 그립니다.

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

void QPainter::drawPolyline(const QPointF *points, int pointCount)

현재 펜을 사용하여 points 에 있는 첫 번째 pointCount 점들로 정의된 폴리라인을 그립니다.

drawPolygon() 함수와 달리 마지막 점은 첫 번째 점과 연결되지 않으며, 폴리라인도 채워지지 않는다는 점에 유의하십시오.

static const QPointF points[3] = {
    QPointF(10.0, 80.0),
    QPointF(20.0, 10.0),
    QPointF(80.0, 30.0),
};

QPainter painter(this);
painter.drawPolyline(points, 3);

drawLines(), drawPolygon() 및 좌표계 항목도참조하십시오 .

void QPainter::drawPolyline(const QPolygon &points)

지정된 points 로 정의된 폴리라인을 현재 펜을 사용하여 그립니다.

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

void QPainter::drawPolyline(const QPolygonF &points)

지정된 points 로 정의된 폴리라인을 현재 펜을 사용하여 그립니다.

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

void QPainter::drawPolyline(const QPoint *points, int pointCount)

현재 펜을 사용하여 points 에 있는 첫 번째 pointCount 점들로 정의된 폴리라인을 그립니다.

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

void QPainter::drawRect(const QRectF &rectangle)

현재 펜과 브러시를 사용하여 현재 rectangle 를 그립니다.

채워진 사각형의 크기는 rectangle 입니다.size(). 테두리가 그려진 사각형의 크기는 rectangle 입니다.size() 에 펜 너비를 더한 값입니다.

직사각형 윤곽선
QRectF rectangle(10.0, 20.0, 80.0, 60.0);

QPainter painter(this);
painter.drawRect(rectangle);

drawRects(), drawPolygon() 및 좌표계 항목도참조하십시오 .

void QPainter::drawRect(const QRect &rectangle)

현재 펜과 브러시를 사용하여 현재 선택 영역 rectangle 을 그립니다.

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

void QPainter::drawRect(int x, int y, int width, int height)

(x, y)를 왼쪽 상단 모서리로 하고, 주어진 width 및 height 를 가진 사각형을 그립니다.

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

void QPainter::drawRects(const QRectF *rectangles, int rectCount)

현재 펜과 브러시를 사용하여 주어진 rectangles 의 첫 번째 rectCount 를 그립니다.

drawRect()도 참조하십시오 .

void QPainter::drawRects(const QList<QRect> &rectangles)

현재 펜과 브러시를 사용하여 지정된 ‘ rectangles ’를 그립니다.

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

void QPainter::drawRects(const QList<QRectF> &rectangles)

현재 펜과 브러시를 사용하여 지정된 ‘ rectangles ’을 그립니다.

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

void QPainter::drawRects(const QRect *rectangles, int rectCount)

현재 펜과 브러시를 사용하여 주어진 ` rectangles `의 첫 번째 ` rectCount `를 그립니다.

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

void QPainter::drawRoundedRect(const QRectF &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize)

주어진 직사각형 rect 의 모서리를 둥글게 처리하여 그립니다.

xRadius 및 yRadius 인수는 모서리가 둥근 사각형의 모서리를 정의하는 타원의 반지름을 지정합니다. mode 이 Qt::RelativeSize 인 경우, xRadius 과 yRadius 은 각각 사각형 너비와 높이의 절반을 백분율로 나타내며, 0.0에서 100.0 사이의 값이어야 합니다.

채워진 사각형의 크기는 rect입니다.size(). 테두리가 그려진 사각형의 크기는 rect입니다.size() 에 펜 너비를 더한 값입니다.

둥근 사각형 윤곽선
QRectF rectangle(10.0, 20.0, 80.0, 60.0);

QPainter painter(this);
painter.drawRoundedRect(rectangle, 20.0, 15.0);

drawRect() 및 QPen도 참조하십시오 .

void QPainter::drawRoundedRect(const QRect &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize)

주어진 사각형 rect 을 모서리를 둥글게 처리하여 그립니다.

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

void QPainter::drawRoundedRect(int x, int y, int w, int h, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize)

주어진 사각형 x, y, w, h 을 모서리가 둥근 형태로 그립니다.

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

void QPainter::drawStaticText(const QPointF &topLeftPosition, const QStaticText &staticText)

지정된 staticText 를 지정된 topLeftPosition 에 그립니다.

텍스트는 페인터에 설정된 글꼴과 변환을 사용하여 그려집니다. 페인터에 설정된 글꼴 및/또는 변환이 ` QStaticText`의 레이아웃을 초기화할 때 사용된 것과 다른 경우, 레이아웃을 다시 계산해야 합니다. ` QStaticText::prepare()`를 사용하여 ` staticText `를 나중에 그려질 때 사용될 글꼴과 변환으로 초기화하십시오.

topLeftPosition 가 staticText 가 초기화되었을 때나 마지막으로 그려졌을 때와 동일하지 않은 경우, 텍스트를 새로운 위치로 이동시킬 때 약간의 오버헤드가 발생합니다.

참고: 페인터의 변환이 아핀 변환이 아닌경우 , staticText 는 drawText()를 일반 호출하여 그려지므로 성능 개선의 가능성이 사라집니다.

참고: y좌표는 글꼴의 상단으로 사용됩니다.

QStaticText도 참조하십시오 .

void QPainter::drawStaticText(const QPoint &topLeftPosition, const QStaticText &staticText)

staticText 를 topLeftPosition 에 그립니다.

참고: y좌표는 글꼴의 상단으로 사용됩니다.

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

void QPainter::drawStaticText(int left, int top, const QStaticText &staticText)

좌표 left 및 top 에 staticText 를 그립니다.

참고: y좌표는 글꼴의 상단으로 사용됩니다.

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

void QPainter::drawText(const QPointF &position, const QString &text)

지정된 text 를 현재 정의된 텍스트 방향으로, 지정된 position 에서 시작하여 그립니다.

이 함수는 텍스트를 여러 줄로 나누거나 줄바꿈 문자(\n)를 표시할 수 없으므로, 줄바꿈 문자를 처리하지 않습니다. 줄바꿈 문자가 포함된 여러 줄의 텍스트를 그리거나 텍스트를 줄바꿈 처리하려면, 대신 사각형을 매개변수로 받는 QPainter::drawText() 오버로드를 사용하십시오.

기본적으로 QPainter 는 텍스트를 앤티앨리어싱 처리하여 그립니다.

참고: y좌표는 글꼴의 기준선으로 사용됩니다.

setFont() 및 setPen()도 참조하십시오 .

void QPainter::drawText(const QPoint &position, const QString &text)

지정된 ` text `을 현재 정의된 텍스트 방향으로, 지정된 ` position`에서 시작하여 그립니다.

기본적으로 ` QPainter `는 텍스트를 앤티앨리어싱 처리하여 그립니다.

참고: y좌표는 글꼴의 기준선이 됩니다.

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

setFont() 및 setPen()도 참조하십시오 .

void QPainter::drawText(const QRectF &rectangle, const QString &text, const QTextOption &option = QTextOption())

지정된 text 를 rectangle 에 그리며, option 를 사용하여 위치, 방향 및 회전을 제어합니다. option 에 지정된 옵션은 QPainter 객체 자체에 설정된 옵션을 우선합니다.

기본적으로 QPainter 는 텍스트를 안티앨리어싱 처리하여 그립니다.

참고: rectangle 의 y좌표는 글꼴의 상단으로 사용됩니다.

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

setFont() 및 setPen()도 참조하십시오 .

void QPainter::drawText(int x, int y, const QString &text)

지정된 텍스트 ` text `를 (x, y) 위치에, 페인터에 현재 정의된 텍스트 방향을 사용하여 그립니다.

기본적으로 ` QPainter `는 텍스트를 앤티앨리어싱 처리하여 그립니다.

참고: y좌표는 글꼴의 기준선으로 사용됩니다.

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

setFont() 및 setPen()도 참조하십시오 .

void QPainter::drawText(const QRect &rectangle, int flags, const QString &text, QRect *boundingRect = nullptr)

지정된 ` text `를, 지정된 ` flags`에 따라 제공된 ` rectangle ` 내에 그립니다.

boundingRect (null이 아닌 경우)는 전체 텍스트를 포함하도록 경계 사각형이 되어야 할 크기로 설정됩니다. 예를 들어, 다음 이미지에서 점선은 함수에 의해 계산된 boundingRect 을 나타내고, 파선은 rectangle 을 나타냅니다:

경계 사각형이 표시된 텍스트
QPainter painter(this);
QFont font = painter.font();
font.setPixelSize(48);
painter.setFont(font);

const QRect rectangle = QRect(0, 0, 100, 50);
QRect boundingRect;
painter.drawText(rectangle, 0, tr("Hello"), &boundingRect);

QPen pen = painter.pen();
pen.setStyle(Qt::DotLine);
painter.setPen(pen);
painter.drawRect(boundingRect.adjusted(0, 0, -pen.width(), -pen.width()));

pen.setStyle(Qt::DashLine);
painter.setPen(pen);
painter.drawRect(rectangle.adjusted(0, 0, -pen.width(), -pen.width()));

기본적으로 ` QPainter `는 텍스트를 안티앨리어싱 처리하여 그립니다.

참고: ` rectangle `의y좌표는 글꼴의 상단으로 사용됩니다.

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

setFont() 및 setPen()도 참조하십시오 .

void QPainter::drawText(const QRectF &rectangle, int flags, const QString &text, QRectF *boundingRect = nullptr)

지정된 ` text `를 제공된 ` rectangle` 내에 그립니다. ` rectangle `는 `alignment`( flags )와 함께 ` text`의 앵커를 정의합니다.

Qt 프로젝트를 보여주는 텍스트
QPainter painter(this);
painter.drawText(rect, Qt::AlignCenter, tr("Qt\nProject"));

boundingRect (null이 아닌 경우)는 전체 텍스트를 포함하기 위해 경계 사각형이 되어야 할 크기로 설정됩니다. 예를 들어, 다음 이미지에서 점선은 함수에 의해 계산된 boundingRect 을 나타내고, 파선은 rectangle 을 나타냅니다:

경계 사각형이 표시된 텍스트
QPainter painter(this);
QFont font = painter.font();
font.setPixelSize(48);
painter.setFont(font);

const QRect rectangle = QRect(0, 0, 100, 50);
QRect boundingRect;
painter.drawText(rectangle, 0, tr("Hello"), &boundingRect);

QPen pen = painter.pen();
pen.setStyle(Qt::DotLine);
painter.setPen(pen);
painter.drawRect(boundingRect.adjusted(0, 0, -pen.width(), -pen.width()));

pen.setStyle(Qt::DashLine);
painter.setPen(pen);
painter.drawRect(rectangle.adjusted(0, 0, -pen.width(), -pen.width()));

flags 인수는 다음 플래그들의 비트별 OR 연산 결과입니다:

기본적으로 QPainter 는 텍스트를 앤티앨리어싱 처리하여 그립니다.

참고: rectangle 의 y좌표는 글꼴의 상단으로 사용됩니다.

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

Qt::AlignmentFlag, Qt::TextFlag, boundingRect() 및 layoutDirection()도 참조하십시오 .

void QPainter::drawText(int x, int y, int width, int height, int flags, const QString &text, QRect *boundingRect = nullptr)

주어진 ` text `를 (x, y), ` width ` 및 ` height`을 원점으로 하는 사각형 내에 그립니다.

boundingRect (null이 아닌 경우)는 전체 텍스트를 포함하도록 경계 사각형이 되어야 할 크기로 설정됩니다. 예를 들어, 다음 이미지에서 점선은 함수에 의해 계산된 boundingRect 을 나타내고, 파선은 x, y, width 및 height 으로 정의된 사각형을 나타냅니다:

경계 사각형이 표시된 텍스트
QPainter painter(this);
QFont font = painter.font();
font.setPixelSize(48);
painter.setFont(font);

const QRect rectangle = QRect(0, 0, 100, 50);
QRect boundingRect;
painter.drawText(rectangle, 0, tr("Hello"), &boundingRect);

QPen pen = painter.pen();
pen.setStyle(Qt::DotLine);
painter.setPen(pen);
painter.drawRect(boundingRect.adjusted(0, 0, -pen.width(), -pen.width()));

pen.setStyle(Qt::DashLine);
painter.setPen(pen);
painter.drawRect(rectangle.adjusted(0, 0, -pen.width(), -pen.width()));

flags 인자는 다음 플래그들의 비트별 OR 연산 결과입니다:

기본적으로 QPainter 는 텍스트를 앤티앨리어싱 처리하여 그립니다.

참고: y좌표는 글꼴의 상단으로 사용됩니다.

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

Qt::AlignmentFlag, Qt::TextFlag, setFont(), setPen()도 참조하십시오 .

void QPainter::drawTiledPixmap(const QRectF &rectangle, const QPixmap &pixmap, const QPointF &position = QPointF())

지정된 rectangle 내부에서, 원점을 지정된 position 로 하여 타일 형태의 pixmap 을 그립니다.

drawTiledPixmap()을 호출하는 것은 drawPixmap()을 여러 번 호출하여 영역을 픽스맵으로 채우는(타일링하는) 것과 유사하지만, 기본이 되는 윈도우 시스템에 따라 잠재적으로 훨씬 더 효율적일 수 있습니다.

drawTiledPixmap()은 일반 dpi 디스플레이와 비교하여 고 dpi 디스플레이(devicePixelRatio > 1)에서도 동일한 시각적 타일링 패턴을 생성합니다. pixmap 의 devicePixelRatio를 설정하여 타일 크기를 제어할 수 있습니다. 예를 들어, 이 값을 2로 설정하면 타일의 너비와 높이가 절반으로 줄어들며(1x 및 2x 디스플레이 모두에서), 2x 디스플레이에서는 고해상도 출력이 생성됩니다.

position 의 오프셋은 rectangle 의 왼쪽 상단 모서리를 기준으로 한 장치 독립 픽셀(DIP) 단위로 제공됩니다. position 를 사용하면 rectangle 내부의 반복 패턴을 정렬할 수 있습니다.

drawPixmap()도 참조하십시오 .

void QPainter::drawTiledPixmap(const QRect &rectangle, const QPixmap &pixmap, const QPoint &position = QPoint())

지정된 rectangle 내부에, 원점을 지정된 position 로 하여 타일링된 pixmap 를 그립니다.

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

void QPainter::drawTiledPixmap(int x, int y, int width, int height, const QPixmap &pixmap, int sx = 0, int sy = 0)

지정된 사각형 영역에 타일링된 pixmap 을 그립니다.

(x, y)는 그리기 대상인 페인트 장치의 왼쪽 상단 점을 지정하며, 주어진 width 및 height 를 사용합니다.

(sx, sy)는 픽스맵이 그려질 지정된 사각형 내의 원점을 지정합니다. 원점 위치는 (x, y)를 기준으로 장치 독립 픽셀(DIP) 단위로 지정됩니다. 기본값은 (0, 0)입니다.

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

bool QPainter::end()

그리기 작업을 종료합니다. 그리기 중에 사용된 모든 리소스가 해제됩니다. 이 메서드는 소멸자에 의해 호출되므로 일반적으로 직접 호출할 필요는 없습니다.

페인터가 더 이상 활성화되어 있지 않으면 ` true `를 반환하고, 그렇지 않으면 ` false`를 반환합니다.

begin() 및 isActive()도 참조하십시오 .

void QPainter::endNativePainting()

수동으로 네이티브 페인팅 명령을 실행한 후 페인터를 복원합니다. 페인터가 다른 페인터 명령을 호출하기 전에, 페인터가 의존하는 모든 네이티브 상태를 복원할 수 있게 합니다.

beginNativePainting()도 참조하십시오 .

void QPainter::eraseRect(const QRectF &rectangle)

지정된 rectangle 내부의 영역을 지웁니다. 다음을 호출하는 것과 동일합니다.

fillRect(rectangle, background());

fillRect()도 참조하십시오 .

void QPainter::eraseRect(const QRect &rectangle)

지정된 rectangle 내부의 영역을 지웁니다.

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

void QPainter::eraseRect(int x, int y, int width, int height)

(x, y)에서 시작하는 사각형 내부의 영역을, 주어진 width 및 height 을 사용하여 지웁니다.

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

void QPainter::fillPath(const QPainterPath &path, const QBrush &brush)

지정된 path 에 지정된 brush 를 채웁니다. 윤곽선은 그려지지 않습니다.

또는 QBrush 대신 QColor 를 지정할 수도 있습니다. QBrush 생성자( QColor 인수를 받음)는 자동으로 솔리드 패턴 브러시를 생성합니다.

drawPath()도 참조하십시오 .

void QPainter::fillRect(const QRectF &rectangle, const QBrush &brush)

지정된 rectangle 에 brush 를 채웁니다.

또는 QBrush 대신 QColor 을 지정할 수도 있습니다. QBrush 생성자( QColor 인수를 받는)는 자동으로 솔리드 패턴 브러시를 생성합니다.

drawRect()도 참조하십시오 .

void QPainter::fillRect(const QRect &rectangle, QGradient::Preset preset)

지정된 rectangle 에 지정된 그라데이션 preset 을 채웁니다.

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

void QPainter::fillRect(const QRect &rectangle, Qt::BrushStyle style)

지정된 ` rectangle `에 ` style `로 지정된 브러시를 채웁니다.

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

void QPainter::fillRect(const QRect &rectangle, Qt::GlobalColor color)

지정된 ` rectangle `에 ` color`를 채웁니다.

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

void QPainter::fillRect(const QRect &rectangle, const QBrush &brush)

지정된 ` rectangle `에 ` brush`을 채웁니다.

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

void QPainter::fillRect(const QRect &rectangle, const QColor &color)

지정된 ` rectangle `에 명시된 ` color ` 값을 채웁니다.

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

void QPainter::fillRect(const QRectF &rectangle, QGradient::Preset preset)

지정된 ` rectangle `에 지정된 그라디언트 ` preset`를 적용합니다.

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

void QPainter::fillRect(const QRectF &rectangle, Qt::BrushStyle style)

지정된 ` rectangle `에 ` style `로 지정된 브러시를 채웁니다.

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

void QPainter::fillRect(const QRectF &rectangle, Qt::GlobalColor color)

지정된 ` rectangle `에 ` color`를 채웁니다.

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

void QPainter::fillRect(const QRectF &rectangle, const QColor &color)

지정된 ` rectangle `에 명시된 ` color `를 채웁니다.

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

void QPainter::fillRect(int x, int y, int width, int height, QGradient::Preset preset)

(x, y)에서 시작하는 직사각형을, 주어진 width 와 height 를 사용하여, 주어진 그라디언트 preset 로 채웁니다.

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

void QPainter::fillRect(int x, int y, int width, int height, Qt::BrushStyle style)

(x, y)에서 시작하는 사각형을, 지정된 width 및 height 값으로 채우며, 지정된 브러시 style 를 사용합니다.

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

void QPainter::fillRect(int x, int y, int width, int height, Qt::GlobalColor color)

(x, y)에서 시작하는 직사각형을, 주어진 width 와 height 를 사용하여, 주어진 color 를 적용하여 채웁니다.

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

void QPainter::fillRect(int x, int y, int width, int height, const QBrush &brush)

(x, y)에서 시작하는 직사각형을, 주어진 width 와 height 를 사용하여, 주어진 brush 을 적용하여 채웁니다.

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

void QPainter::fillRect(int x, int y, int width, int height, const QColor &color)

(x, y)에서 시작하는 직사각형을, 주어진 width 와 height 를 사용하여, 주어진 color 를 적용하여 채웁니다.

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

const QFont &QPainter::font() const

텍스트를 그리는 데 사용되는 현재 설정된 글꼴을 반환합니다.

setFont(), drawText() 및 Settings도 참조하십시오 .

QFontInfo QPainter::fontInfo() const

페인터가 활성화된 경우, 해당 페인터의 글꼴 정보를 반환합니다. 그렇지 않은 경우, 반환 값은 정의되지 않습니다.

font(), isActive(), 및 Settings도 참조하십시오 .

QFontMetrics QPainter::fontMetrics() const

페인터가 활성화된 경우, 해당 페인터의 글꼴 메트릭을 반환합니다. 그렇지 않은 경우, 반환 값은 정의되지 않습니다.

font(), isActive() 및 Settings도 참조하십시오 .

bool QPainter::hasClipping() const

클리핑이 설정된 경우 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다.

setClipping() 및 Clipping도 참조하십시오 .

bool QPainter::isActive() const

begin()이 호출되었으나 end()은 아직 호출되지 않은 경우 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다.

begin() 및 QPaintDevice::paintingActive()도 참조하십시오 .

Qt::LayoutDirection QPainter::layoutDirection() const

텍스트를 그릴 때 페인터가 사용하는 레이아웃 방향을 반환합니다.

QTextOption::textDirection(), setLayoutDirection(), drawText() 및 Settings도 참조하십시오 .

qreal QPainter::opacity() const

페인터의 불투명도를 반환합니다. 기본값은 1입니다.

setOpacity()도 참조하십시오 .

QPaintEngine *QPainter::paintEngine() const

페인터가 활성화된 경우, 페인터가 현재 작업 중인 페인트 엔진을 반환하고, 그렇지 않은 경우 0을 반환합니다.

isActive()도 참조하십시오 .

const QPen &QPainter::pen() const

화가(painter)의 현재 펜을 반환합니다.

setPen() 및 Settings도 참조하십시오 .

QPainter::RenderHints QPainter::renderHints() const

이 페인터에 설정된 렌더링 힌트를 지정하는 플래그를 반환합니다.

setRenderHints(), testRenderHint() 및 Rendering Quality도 참조하십시오 .

void QPainter::resetTransform()

translate(), scale(), shear(), rotate(), setWorldTransform(), setViewport() 및 setWindow()를 사용하여 적용된 모든 변환을 초기화합니다.

Coordinate Transformations도 참조하십시오 .

void QPainter::restore()

현재 페인터 상태를 복원합니다(스택에서 저장된 상태를 하나 꺼냅니다).

save()도 참조하십시오 .

void QPainter::rotate(qreal angle)

좌표계를 시계 방향으로 회전합니다. 지정된 angle 매개변수는 도(°) 단위입니다.

setWorldTransform() 및 Coordinate Transformations도 참조하십시오 .

void QPainter::save()

현재 페인터 상태를 저장합니다(상태를 스택에 밀어 넣습니다). save()를 호출한 후에는 반드시 해당 restore()을 호출해야 합니다. end() 함수는 스택을 풀어서 원래 상태로 되돌립니다.

restore()도 참조하십시오 .

void QPainter::scale(qreal sx, qreal sy)

좌표계를 (sx, sy) 비율로 확대/축소합니다.

setWorldTransform() 및 Coordinate Transformations도 참조하십시오 .

void QPainter::setBackground(const QBrush &brush)

페인터의 배경 브러시를 지정된 brush 로 설정합니다.

배경 브러시는 불투명한 텍스트, 점선 및 비트맵을 그릴 때 채워지는 브러시입니다. 투명 배경 모드(기본값)에서는 배경 브러시가 적용되지 않습니다.

background(), setBackgroundMode() 및 Settings도 참조하십시오 .

void QPainter::setBackgroundMode(Qt::BGMode mode)

페인터의 배경 모드를 지정된 값으로 설정합니다. mode

Qt::TransparentMode (기본값)은 배경 픽셀을 설정하지 않고 점선과 텍스트를 그립니다. ` Qt::OpaqueMode `는 이 공간을 현재 배경색으로 채웁니다.

비트맵이나 픽스맵을 투명하게 그리려면 QPixmap::setMask()을 사용해야 합니다.

backgroundMode(), setBackground() 및 Settings도 참조하십시오 .

void QPainter::setBrush(const QBrush &brush)

화가의 붓을 지정된 brush 로 설정합니다.

페인터의 브러시는 도형의 채우기 방식을 정의합니다.

brush() 및 Settings도 참조하십시오 .

[since 6.11] void QPainter::setBrush(QBrush &&brush)

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

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

[since 6.9] void QPainter::setBrush(QColor color)

페인터의 브러시를 지정된 color 를 가진 단색 브러시로 설정합니다.

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

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

void QPainter::setBrush(Qt::BrushStyle style)

페인터의 브러시 색상을 검은색으로 설정하고, 지정된 style 를 적용합니다.

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

[since 6.9] void QPainter::setBrush(Qt::GlobalColor color)

페인터의 브러시를 지정된 color 를 가진 솔리드 브러시로 설정합니다.

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

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

void QPainter::setBrushOrigin(const QPointF &position)

브러시 원점을 position 로 설정합니다.

브러시 원점은 페인터의 브러시에 대한 (0, 0) 좌표를 지정합니다.

Qt 3에서는 위젯이 부모의 배경을 채택하기 위해 brushOrigin()이 필요했지만, Qt 4 페인터는 위젯의 autoFillBackground 속성을 true로 설정하여 명시적으로 지시하지 않는 한 배경을 그리지 않으므로 더 이상 필요하지 않습니다.

brushOrigin() 및 Settings도 참조하십시오 .

void QPainter::setBrushOrigin(const QPoint &position)

브러시의 원점을 지정된 position 로 설정합니다.

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

void QPainter::setBrushOrigin(int x, int y)

브러시의 원점을 (x, y) 지점으로 설정합니다.

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

void QPainter::setClipPath(const QPainterPath &path, Qt::ClipOperation operation = Qt::ReplaceClip)

클리핑을 활성화하고, 페인터의 클립 경로를 지정된 path 로 설정하며, 클립 operation 를 적용합니다.

클립 경로는 논리적(페인터) 좌표로 지정된다는 점에 유의하십시오.

clipPath(), clipRegion() 및 Clipping도 참조하십시오 .

void QPainter::setClipRect(const QRectF &rectangle, Qt::ClipOperation operation = Qt::ReplaceClip)

클리핑을 활성화하고, 지정된 클립 사각형(clip operation)을 사용하여 클립 영역을 지정된 클립 사각형( rectangle )으로 설정합니다. 기본 동작은 현재 클립 사각형을 대체하는 것입니다.

클립 사각형은 논리적(페인터) 좌표로 지정된다는 점에 유의하십시오.

clipRegion(), setClipping() 및 Clipping도 참조하십시오 .

void QPainter::setClipRect(int x, int y, int width, int height, Qt::ClipOperation operation = Qt::ReplaceClip)

클리핑을 활성화하고, 클립 영역을 (x, y)에서 시작하는 직사각형으로 설정하며, 지정된 width 및 height 값을 적용합니다.

void QPainter::setClipRect(const QRect &rectangle, Qt::ClipOperation operation = Qt::ReplaceClip)

클리핑을 활성화하고, 지정된 클립 operation 를 사용하여 클립 영역을 지정된 rectangle 로 설정합니다.

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

void QPainter::setClipRegion(const QRegion &region, Qt::ClipOperation operation = Qt::ReplaceClip)

지정된 클립 operation 을 사용하여 클립 영역을 주어진 region 로 설정합니다. 기본 클립 작업은 현재 클립 영역을 대체하는 것입니다.

클립 영역은 논리 좌표로 지정된다는 점에 유의하십시오.

clipRegion(), setClipRect() 및 Clipping도 참조하십시오 .

void QPainter::setClipping(bool enable)

enable 가 true인 경우 클리핑을 활성화하고, enable 가 false인 경우 클리핑을 비활성화합니다.

hasClipping() 및 Clipping도 참조하십시오 .

void QPainter::setCompositionMode(QPainter::CompositionMode mode)

구성 모드를 지정된 mode 로 설정합니다.

경고: QImage 에서 작동하는 QPainter 만이 모든 합성 모드를 완벽하게 지원합니다. RasterOp 모드는 compositionMode()에 설명된 대로 X11에서 지원됩니다.

compositionMode()도 참조하십시오 .

void QPainter::setFont(const QFont &font)

페인터의 글꼴을 지정된 font 로 설정합니다.

이 글꼴은 이후 호출되는 drawText() 함수에서 사용됩니다. 텍스트 색상은 펜 색상과 동일합니다.

사용할 수 없는 글꼴을 설정하면 Qt는 가장 유사한 글꼴을 찾아 적용합니다. ` font()`는 `setFont()`를 통해 설정한 값을 반환하며, ` fontInfo()`는 실제로 사용 중인 글꼴을 반환합니다(두 값이 동일할 수도 있음).

font(), drawText() 및 Settings도 참조하십시오 .

void QPainter::setLayoutDirection(Qt::LayoutDirection direction)

텍스트를 그릴 때 페인터가 사용하는 레이아웃 방향을 지정된 direction 로 설정합니다.

기본값은 ` Qt::LayoutDirectionAuto`이며, 이 경우 그려진 텍스트의 방향을 암시적으로 결정합니다.

QTextOption::setTextDirection(), layoutDirection(), drawText() 및 Settings도 참조하십시오 .

void QPainter::setOpacity(qreal opacity)

페인터의 불투명도를 opacity 로 설정합니다. 값은 0.0에서 1.0 사이의 범위여야 하며, 0.0은 완전히 투명하고 1.0은 완전히 불투명함을 의미합니다.

페인터에 설정된 불투명도는 각 그리기 작업에 개별적으로 적용됩니다. 도형을 채우는 작업과 윤곽선을 그리는 작업은 별개의 그리기 작업으로 간주됩니다.

opacity()도 참조하십시오 .

void QPainter::setPen(const QPen &pen)

화가의 펜을 지정된 ‘ pen ’로 설정합니다.

pen 는 선과 윤곽선을 그리는 방법을 정의하며, 텍스트 색상도 정의합니다.

pen() 및 Settings도 참조하십시오 .

[since 6.11] void QPainter::setPen(QPen &&pen)

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

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

void QPainter::setPen(Qt::PenStyle style)

페인터의 펜을 지정된 style, 너비 1, 검은색으로 설정합니다.

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

void QPainter::setPen(const QColor &color)

페인터의 펜을 스타일 ` Qt::SolidLine`, 너비 1, 그리고 지정된 ` color`로 설정합니다.

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

void QPainter::setRenderHint(QPainter::RenderHint hint, bool on = true)

on 가 true인 경우, 지정된 렌더링 힌트 hint 를 페인터에 설정하고, 그렇지 않은 경우 렌더링 힌트를 지웁니다.

setRenderHints(), renderHints(), Rendering Quality도 참조하십시오 .

void QPainter::setRenderHints(QPainter::RenderHints hints, bool on = true)

on 가 true인 경우, 지정된 렌더링 힌트 hints 를 페인터에 설정하고, 그렇지 않은 경우 렌더링 힌트를 지웁니다.

setRenderHint(), renderHints(), Rendering Quality도 참조하십시오 .

void QPainter::setTransform(const QTransform &transform, bool combine = false)

월드 변환 행렬을 설정합니다. ` combine `가 true인 경우, 지정된 ` transform `가 현재 행렬과 결합되며, 그렇지 않은 경우 현재 행렬을 대체합니다.

transform() 및 setWorldTransform()도 참조하십시오 .

void QPainter::setViewTransformEnabled(bool enable)

enable 가 true인 경우 뷰 변환을 활성화하고, enable 가 false인 경우 뷰 변환을 비활성화합니다.

viewTransformEnabled() 및 Window-Viewport 변환항목도 참조하십시오.

void QPainter::setViewport(const QRect &rectangle)

페인터의 뷰포트 사각형을 지정된 뷰포트 변환( rectangle)으로 설정하고, 뷰 변환을 활성화합니다.

뷰포트 사각형은 뷰 변환의 일부입니다. 뷰포트는 장치 좌표계를 지정합니다. 이와 쌍을 이루는 window()은 논리적 좌표계를 지정합니다.

기본 뷰포트 사각형은 장치의 사각형과 동일합니다.

viewport(), viewTransformEnabled() 및 창-뷰포트 변환항목도 참조하십시오 .

void QPainter::setViewport(int x, int y, int width, int height)

페인터의 뷰포트 사각형을 (x, y)에서 시작하며, 지정된 width 및 height 를 갖는 사각형으로 설정합니다.

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

void QPainter::setWindow(const QRect &rectangle)

페인터 창을 지정된 창 좌표계( rectangle)로 설정하고, 뷰 변환을 활성화합니다.

창 사각형은 뷰 변환의 일부입니다. 창은 논리적 좌표계를 지정합니다. 이와 쌍을 이루는 viewport()는 장치 좌표계를 지정합니다.

기본 창 사각형은 장치의 사각형과 동일합니다.

window(), viewTransformEnabled() 및 창-뷰포트 변환항목도 참조하십시오 .

void QPainter::setWindow(int x, int y, int width, int height)

페인터의 창을 (x, y)에서 시작하고, 지정된 width 및 height 로 설정합니다.

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

void QPainter::setWorldMatrixEnabled(bool enable)

enable 가 true인 경우 변환을 활성화하고, enable 가 false인 경우 변환을 비활성화합니다. 월드 변환 행렬은 변경되지 않습니다.

worldMatrixEnabled(), worldTransform(), Coordinate Transformations도 참조하십시오 .

void QPainter::setWorldTransform(const QTransform &matrix, bool combine = false)

월드 변환 행렬을 설정합니다. ` combine `가 `true`인 경우, 지정된 ` matrix `가 현재 행렬과 결합되며, 그렇지 않은 경우 현재 행렬을 대체합니다.

worldTransform(), transform(), setTransform()도 참조하십시오 .

void QPainter::shear(qreal sh, qreal sv)

좌표계를 (sh, sv)로 전단합니다.

setWorldTransform() 및 Coordinate Transformations도 참조하십시오 .

void QPainter::strokePath(const QPainterPath &path, const QPen &pen)

path 경로의 윤곽선(스트로크)을 pen

fillPath() 및 Drawing도 참조하십시오 .

bool QPainter::testRenderHint(QPainter::RenderHint hint) const

hint 가 설정되어 있으면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.

renderHints() 및 setRenderHint()도 참조하십시오 .

const QTransform &QPainter::transform() const

worldTransform()의 별칭입니다. 월드 변환 행렬을 반환합니다.

setTransform() 및 worldTransform()도 참조하십시오 .

void QPainter::translate(const QPointF &offset)

주어진 offset 에 따라 좌표계를 변환합니다. 즉, 주어진 offset 가 점들에 더해집니다.

setWorldTransform() 및 Coordinate Transformations도 참조하십시오 .

void QPainter::translate(const QPoint &offset)

주어진 변환 offset 에 따라 좌표계를 변환합니다.

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

void QPainter::translate(qreal dx, qreal dy)

좌표계를 벡터 (dx, dy)만큼 변환합니다.

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

bool QPainter::viewTransformEnabled() const

뷰 변환이 활성화되어 있으면 true 를 반환하고, 그렇지 않으면 false를 반환합니다.

setViewTransformEnabled() 및 worldTransform()도 참조하십시오 .

QRect QPainter::viewport() const

뷰포트 사각형을 반환합니다.

setViewport() 및 setViewTransformEnabled()도 참조하십시오 .

QRect QPainter::window() const

창의 직사각형 좌표를 반환합니다.

setWindow() 및 setViewTransformEnabled()도 참조하십시오 .

bool QPainter::worldMatrixEnabled() const

월드 변환이 활성화되어 있으면 ` true `를 반환하고, 그렇지 않으면 `false`를 반환합니다.

setWorldMatrixEnabled(), worldTransform() 및 좌표계 항목도참조하십시오 .

const QTransform &QPainter::worldTransform() const

월드 변환 행렬을 반환합니다.

setWorldTransform()도 참조하십시오 .

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