티스토리 뷰
QPainter 클래스는 GUI 구성에 필요한 각종 작업을 수행할 수 있도록 지원하는 클래스로 라인 및 다양한 도형 그리기를 비롯해서 텍스트 드로잉과 스케일과 변형을 감안 그리기 등도 수행할 수 있다. QPaintDevice 클래스를 상속하는 모든 오브젝트에 대해서 작업할 수 있다.
참조 링크 : https://doc.qt.io/qt-5/qpainter.html
QPaintDevice 클래스를 상속하는 클래스들은 다음과 같다.
QGLFramebufferObject, QGLPixelBuffer, QImage, QOpenGLPaintDevice, QPagedPaintDevice, QPaintDeviceWindow, QPicture, QPixmap, QSvgGenerator, QWidget
위의 클래스 목록에 QWidget이 있음을 확인할 수 있듯이 거의 대부분의 위젯에 대해서 작업이 가능함을 알 수 있다.
class QGraphicsRectWidget : public QGraphicsWidget
{
public:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *,
QWidget *) override
{
painter->fillRect(rect(), Qt::blue);
}
};
많은 경우는 위의 예제 코드처럼 paint 함수를 재정의 하거나 paint 이벤트에 대응하는 방식으로 사용하는데 시스템에서 전달하는 QPainter 오브젝트를 통해서 필요한 작업을 수행한다. 그리기 작업과 연관된 주요 설정과 함수들은 다음과 같다.
QFontInfo fontInfo()
QFont &font()
QFontMetrics fontMetrics()
void setFont(const QFont &font) : 폰트 정보 조회 및 설정
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) : 정적 텍스트 출력.
변형이 없다면 DrawText()와 동일
void drawText(const QRectF &rectangle, int flags, const QString &text, QRectF *boundingRect = nullptr)
void drawText(const QPointF &position, const QString &text)
void drawText(const QPoint &position, const QString &text)
void drawText(int x, int y, const QString &text)
void drawText(const QRect &rectangle, int flags, const QString &text, QRect *boundingRect = nullptr)
void drawText(int x, int y, int width, int height, int flags, const QString &text, QRect *boundingRect = nullptr)
void drawText(const QRectF &rectangle, const QString &text, const QTextOption &option = QTextOption()) :
텍스트 출력. rectangle을 지정하면 해당 영역으로 제한해서 출력.
boundingRect로 텍스트 전체 출력에 필요한 영역 범위를 리턴 받을 수 있다.
flags는 Qt::AlignLeft, AlignRight, AlignHCenter, AlignJustify, AlignTop, AlignBottom, AlignVCenter, AlignCenter, TextDontClip, TextSingleLine, TextExpandTabs, TextShowMnemonic, TextWordWrap, TextIncludeTrailingSpaces 등으로 지정할 수 있다.
const QPen &pen()
void setPen(const QPen &pen)
void setPen(const QColor &color)
void setPen(Qt::PenStyle style) : 펜 조회 및 설정. 선과 텍스트 출력에 영향을 준다. 펜을 색으로 지정하면 Qt::SolidLine, 폭 1의 펜으로 지정되고, 펜을 스타일로 지정하면 검은색, 폭 1의 펜으로 지정된다.
void drawLine(const QLineF &line)
void drawLine(const QLine &line)
void drawLine(int x1, int y1, int x2, int y2)
void drawLine(const QPoint &p1, const QPoint &p2)
void drawLine(const QPointF &p1, const QPointF &p2)
void drawLines(const QLineF *lines, int lineCount)
void drawLines(const QVector<QLineF> &lines)
void drawLines(const QPointF *pointPairs, int lineCount)
void drawLines(const QVector<QPointF> &pointPairs)
void drawLines(const QLine *lines, int lineCount)
void drawLines(const QVector<QLine> &lines)
void drawLines(const QPoint *pointPairs, int lineCount)
void drawLines(const QVector<QPoint> &pointPairs)
void drawPath(const QPainterPath &path) : 선 그리기
void drawPolygon(const QPointF *points, int pointCount, 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 drawPolygon(const QPolygon &points, Qt::FillRule fillRule = Qt::OddEvenFill)
void drawPolyline(const QPointF *points, int pointCount)
void drawPolyline(const QPolygonF &points)
void drawPolyline(const QPoint *points, int pointCount)
void drawPolyline(const QPolygon &points)
void drawConvexPolygon(const QPointF *points, int pointCount)
void drawConvexPolygon(const QPolygonF &polygon)
void drawConvexPolygon(const QPoint *points, int pointCount)
void drawConvexPolygon(const QPolygon &polygon) : 점을 연결하는 선그리기.
drawPolygon()은 첫 점과 끝점을 연결하고 fillRule로 채우기 한다.
void drawRect(const QRectF &rectangle)
void drawRect(int x, int y, int width, int height)
void drawRect(const QRect &rectangle)
void drawRects(const QRectF *rectangles, int rectCount)
void drawRects(const QVector<QRectF> &rectangles)
void drawRects(const QRect *rectangles, int rectCount)
void drawRects(const QVector<QRect> &rectangles)
void drawRoundedRect(const QRectF &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode)
void drawRoundedRect(int x, int y, int w, int h, qreal xRadius, qreal yRadius, Qt::SizeMode mode)
void drawRoundedRect(const QRect &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode) : 사각형 그리기
void drawPie(const QRectF &rectangle, int startAngle, int spanAngle)
void drawPie(int x, int y, int width, int height, int startAngle, int spanAngle)
void drawPie(const QRect &rectangle, int startAngle, int spanAngle)
void drawEllipse(const QRectF &rectangle)
void drawEllipse(const QRect &rectangle)
void drawEllipse(int x, int y, int width, int height)
void drawEllipse(const QPointF ¢er, qreal rx, qreal ry)
void drawEllipse(const QPoint ¢er, int rx, int ry)
void drawChord(const QRectF &rectangle, int startAngle, int spanAngle)
void drawChord(int x, int y, int width, int height, int startAngle, int spanAngle)
void drawChord(const QRect &rectangle, int startAngle, int spanAngle) : 호, 원, 반원 그리기
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 QPolygonF &points)
void drawPoints(const QPoint *points, int pointCount)
void drawPoints(const QPolygon &points) : 점 출력
const QBrush & brush()
const QBrush & background()
QPoint brushOrigin()
void setBackground(const QBrush &brush)
void setBrushOrigin(const QPointF &position)
void setBrushOrigin(int x, int y)
void setBrushOrigin(const QPoint &position)
void setBrush(const QBrush &brush)
void setBrush(Qt::BrushStyle style) : 브러시 조회 및 설정. 채우기에 영향을 준다. 스타일로 브러시를 설정하면 검은색 브러시가 설정된다.
void fillPath(const QPainterPath &path, const QBrush &brush)
void fillRect(const QRectF &rectangle, const QBrush &brush)
void fillRect(int x, int y, int width, int height, const QBrush &brush)
void fillRect(const QRect &rectangle, const QBrush &brush)
void fillRect(const QRectF &rectangle, const QColor &color)
void fillRect(int x, int y, int width, int height, const QColor &color)
void fillRect(const QRect &rectangle, const QColor &color)
void fillRect(int x, int y, int width, int height, Qt::GlobalColor color)
void fillRect(const QRect &rectangle, Qt::GlobalColor color)
void fillRect(const QRectF &rectangle, Qt::GlobalColor color)
void fillRect(int x, int y, int width, int height, Qt::BrushStyle style)
void fillRect(const QRect &rectangle, Qt::BrushStyle style)
void fillRect(const QRectF &rectangle, Qt::BrushStyle style)
void fillRect(int x, int y, int width, int height, QGradient::Preset preset)
void fillRect(const QRect &rectangle, QGradient::Preset preset)
void fillRect(const QRectF &rectangle, QGradient::Preset preset) : 테두리 없는 경로 및 사각 채우기 수행.
void drawImage(const QRectF &target, 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(const QPointF &point, const QImage &image, const QRectF &source,
Qt::ImageConversionFlags flags = Qt::AutoColor)
void drawImage(const QPoint &point, const QImage &image, const QRect &source,
Qt::ImageConversionFlags flags = Qt::AutoColor)
void drawImage(const QRectF &rectangle, const QImage &image)
void drawImage(const QRect &rectangle, const QImage &image)
void drawImage(const QPointF &point, const QImage &image)
void drawImage(const QPoint &point, const QImage &image)
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 drawPicture(const QPointF &point, const QPicture &picture)
void drawPicture(int x, int y, const QPicture &picture)
void drawPicture(const QPoint &point, const QPicture &picture)
void drawPixmap(const QRectF &target, const QPixmap &pixmap, const QRectF &source)
void drawPixmap(const QRect &target, const QPixmap &pixmap, const QRect &source)
void drawPixmap(int x, int y, int w, int h, const QPixmap &pixmap, int sx, int sy, int sw, int sh)
void drawPixmap(int x, int y, const QPixmap &pixmap, int sx, int sy, int sw, int sh)
void drawPixmap(const QPointF &point, const QPixmap &pixmap, const QRectF &source)
void drawPixmap(const QPoint &point, const QPixmap &pixmap, const QRect &source)
void drawPixmap(const QPointF &point, const QPixmap &pixmap)
void drawPixmap(const QPoint &point, const QPixmap &pixmap)
void drawPixmap(int x, int y, const QPixmap &pixmap)
void drawPixmap(const QRect &rectangle, const QPixmap &pixmap)
void drawPixmap(int x, int y, int width, int height, const QPixmap &pixmap)
void drawPixmapFragments(const QPainter::PixmapFragment *fragments, int fragmentCount,
const QPixmap &pixmap, QPainter::PixmapFragmentHints hints = PixmapFragmentHints())
void drawTiledPixmap(const QRectF &rectangle, const QPixmap &pixmap, const QPointF &position = QPointF())
void drawTiledPixmap(int x, int y, int width, int height, const QPixmap &pixmap, int sx = 0, int sy = 0)
void drawTiledPixmap(const QRect &rectangle, const QPixmap &pixmap, const QPoint &position = QPoint()) :
이미지 출력
기타 작업과 관련한 주요 함수와 슬롯은 다음과 같다.
Qt::BGMode backgroundMode()
void QPainter::setBackgroundMode(Qt::BGMode mode) : 배경 모드 조회 및 설정
기본값은 Qt::TransparentMode이고 Qt::OpaqueMode로 설정하면 현재 배경색으로 채우기 한다.
QRect viewport()
void setViewport(const QRect &rectangle) : 장치의 뷰포트 조회 및 설정. 변형 작업의 대상 영역이 된다
QRect window()
void setWindow(const QRect &rectangle) : 윈도우 논리 영역 조회 및 설정
bool viewTransformEnabled()
void setViewTransformEnabled(bool enable) : 변형 작업 가능 여부 조회 및 설정
QTransform &worldTransform()
QTransform &transform()
void setWorldTransform(const QTransform &matrix, bool combine = false)
void setTransform(const QTransform &transform, bool combine = false) : 변형 작업 설정 조회 및 설정
bool hasClipping()
QRegion clipRegion()
QPainterPath clipPath()
QRectF clipBoundingRect()
void setClipping(bool enable)
void setClipRegion(const QRegion ®ion, Qt::ClipOperation operation = Qt::ReplaceClip)
void setClipPath(const QPainterPath &path, Qt::ClipOperation operation = Qt::ReplaceClip)
void setClipRect(const QRectF &rectangle, Qt::ClipOperation operation = Qt::ReplaceClip)
void setClipRect(const QRect &rectangle, Qt::ClipOperation operation = Qt::ReplaceClip)
void setClipRect(int x, int y, int width, int height, Qt::ClipOperation operation = Qt::ReplaceClip) :
잘라내기 여부/영역 조회 및 설정. 잘라내기는 논리 영역에 대하여 수행한다.
void shear(qreal sh, qreal sv)void setFont(const QFont &font) : 깎아내기
void strokePath(const QPainterPath &path, const QPen &pen) : 지정한 펜으로 경로 외곽선 그리기
qreal opacity()
void setOpacity(qreal opacity) : 투명도 조회 및 설정. 투명도를 0.0~0.1로 설정. 0.0은 투명.
void QPainter::scale(qreal sx, qreal sy) : 배율 지정
void rotate(qreal angle) : 지정 각도로 회전
void resetTransform() : 모든 변형 초기화
void save()
void restore() : 페인터의 상태를 스택에 저장 및 복원
'C | C++' 카테고리의 다른 글
QFileDialog 클래스(QT C++) (0) | 2024.03.24 |
---|---|
QVariant 클래스(QT C++) (0) | 2024.03.19 |
QSettings 클래스(QT C++) (0) | 2024.03.18 |
QGraphicsItem 클래스(QT C++) (0) | 2024.03.14 |
QGraphicsScene 클래스(QT C++) (0) | 2024.03.13 |