- By刘立博
- 2021-03-21 11:34:45
- 1006人已阅读
绘制Pixmap图片
导入背景图片
打开ResourceFiles目录中的qrc文件,导入背景图片backend.jpg
重写绘图事件
我们需要重写paintEvent事件,使用QPainter渲染背景图片
头文件:
#pragma once
#include <qwidget.h>
#include "ui_testPainter.h"
class testPainter : public QWidget
{
Q_OBJECT
public:
testPainter(QWidget *parent = Q_NULLPTR);
protected:
void paintEvent(QPaintEvent* event) override;
};
实现类:
#include "testPainter.h"
#include <QPainter>
testPainter::testPainter(QWidget *parent)
{
}
void testPainter::paintEvent(QPaintEvent* event)
{
Q_UNUSED(event);
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.drawPixmap(rect(), QPixmap(":/testPainter/backend.jpg"));
}
测试
QPen绘制线条
QPen用于绘图时对线条进行设置,主要包括线宽、颜色、线型等。下表为QPen类主要接口函数,通常一个设置的函数都有一个对应的读取函数。
函数原型 |
功能 |
void setColor(const QColor &color) |
设置画笔颜色 |
void QSize::setWidth(int w) |
设置线条宽度 |
void setStyle(Qt::PenStyle) |
设置线条样式 |
void setCapStyle(Qt::PenCapStyle pcs) |
设置线条端点样式 |
void setJoinStyle(Qt::PenJoinStyle pcs) |
设置连接样式 |
示例
设置线条为10像素,深蓝色,实线;从坐标(100,100)画到坐标(200,200)
QPen pen;
pen.setWidth(10);
pen.setColor(Qt::darkBlue);
pen.setStyle(Qt::SolidLine);
pen.setCapStyle(Qt::RoundCap);
pen.setJoinStyle(Qt::RoundJoin);
painter.setPen(pen);
painter.drawLine(QPointF(100, 100), QPointF(200, 200));
测试
Qbrush填充图片
QBrush定义了QPainter绘图时的填充特性,包括填充颜色、填充样式、材质填充时的材质图等。
函数原型 |
功能 |
void setColor(const QColor &color) |
设置画刷颜色,实体填充时即为填充颜色 |
void setStyle(Qt::BrushStyle) |
设置画刷样式,参数为Qt::BrushStyle枚举类型 |
void setTexture(const QPixmap &pixmap) |
设置一个QPixmap类型图片作为画刷的图片,画刷样式自动设置为Qt::TexturePattern |
void setTextureImage(const QImage &image) |
设置一个QImage类型的图片作为画刷图片,画刷样式自动设置为Qt::TexturePattern |
Qt::BrushStyle枚举常量
枚举常量 |
功能 |
NoBrush |
不填充 |
SolidPattern |
单色填充 |
HorPattern |
水平线填充 |
VerPattern |
垂直线填充 |
LinearGradientPattern |
线型渐变 |
RadialGradientPattern |
辐射渐变 |
ConicalGradientPattern |
圆锥渐变 |
TexturePattern |
材质填充 |
BDiagPattern |
反斜角填充 |
FDiagPattern |
正斜角填充 |
示例
使用backend.jpg,在坐标(300,100)填充一个100X100的矩形
QPixmap backend = QPixmap(":/testPainter/backend.jpg");
QBrush brush;
brush.setTexture(backend);
brush.setStyle(Qt::TexturePattern);
painter.setBrush(brush);
painter.drawRect(300, 100, 100, 100);
测试