qt QPainter详解
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();
}
觉得有帮助的话,打赏一下呗。。