C++
QPainter基本绘图
  • 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);

 

测试