1. 概述
QPainter类是Qt框架中用于在窗口或图像上进行绘制的核心类。它提供了丰富的绘图功能,包括绘制线条、形状、图像、文本以及复杂的图形路径等。QPainter可以与QWidget、QPixmap、QBitmap、QImage等绘制目标(也称为设备上下文或画布)结合使用,以在其上进行绘制操作。通过QPainter,开发者可以创建丰富的用户界面和图形效果。
2. 重要方法
QPainter类提供了大量的方法来执行各种绘制任务。以下是一些重要的方法:
-
绘制基本形状
void drawLine(const QLine &line)
: 绘制一条直线。void drawRect(const QRect &rect)
: 绘制一个矩形。void drawEllipse(const QRect &rect)
: 绘制一个椭圆。void drawPixmap(const QPoint &position, const QPixmap &pixmap)
: 绘制一个QPixmap图像。void drawImage(const QRect &targetRect, const QImage &image, const QRect &sourceRect = QRect(), Qt::ImageConversionFlags flags = Qt::AutoColor)
: 绘制一个QImage图像。
-
绘制文本
void drawText(const QPoint &position, const QString &text)
: 在指定位置绘制文本。void drawText(const QRect &rect, int flags, const QString &text, QRect *boundingRect = nullptr)
: 在矩形区域内绘制文本,并可以指定对齐方式等。
-
设置绘制属性
void setPen(const QPen &pen)
: 设置绘制线条的笔刷。void setBrush(const QBrush &brush)
: 设置填充形状的画刷。void setFont(const QFont &font)
: 设置绘制文本的字体。
-
其他重要方法
-
void save()
: 保存当前QPainter的状态,以便稍后恢复。 -
void restore()
: 恢复之前保存的QPainter状态。 -
void translate(qreal dx, qreal dy)
: 移动坐标系的原点。 -
void scale(qreal sx, qreal sy)
: 缩放坐标系。 -
void rotate(qreal angle)
: 旋转坐标系。#include <QApplication>
#include <QMainWindow>
#include <QWidget>
#include <QPainter>
#include <QPen>
#include <QBrush>class PaintDemoWidget : public QWidget
{
protected:
void paintEvent(QPaintEvent *event) override
{
QPainter painter(this);// 绘制线条 QPen pen(Qt::black, 2); // 黑色画笔,线宽为2 painter.setPen(pen); painter.drawLine(10, 10, 200, 10); // 绘制矩形 pen.setColor(Qt::red); painter.setPen(pen); painter.setBrush(Qt::green); // 绿色画刷 painter.drawRect(10, 30, 100, 50); // 绘制椭圆 pen.setColor(Qt::blue); painter.setPen(pen); painter.setBrush(Qt::yellow); // 黄色画刷 painter.drawEllipse(150, 30, 100, 50); // 绘制文本 pen.setColor(Qt::magenta); painter.setPen(pen); painter.setFont(QFont("Arial", 16)); painter.drawText(10, 100, "Hello, QPainter!"); // 绘制图片 QPixmap pixmap(":/images/sample_image.jpg"); // 确保有相应的图像资源 painter.drawPixmap(10, 150, pixmap.scaled(200, 100)); // 缩放图片并绘制 }
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);// 创建主窗口 QMainWindow mainWindow; mainWindow.setWindowTitle("QPainter Example"); mainWindow.resize(400, 300); // 创建自定义绘图控件 PaintDemoWidget *paintDemoWidget = new PaintDemoWidget; mainWindow.setCentralWidget(paintDemoWidget); // 显示主窗口 mainWindow.show(); return app.exec();
}
-
觉得有帮助的话,打赏一下呗。。