本文章将详细介绍Qt的绘图QPainter的使用

第一部分:基础知识点

Qt的二维绘图基本功能是使用QPainter在绘图设备上绘图,绘图设备包括QWidget,QPixmap等,通过绘制一些基本的点,线,圆等基本形状组成自己想要的图形,得到的图形是不可交互操作的图形。

绘图系统基于QPainter,QPaintDevice和QPainterEngine类。QPainter是用来进行绘图操作的类,QPainterDevice是一个可以使用QPainter进行绘图的抽象的二维界面,QPainterEngine给QPainter提供在不同设备上绘图的接口。QPainterEngine类由QPainter和QPainterDevice内部使用,应用程序一般无须和QPainterEngine打交道,除非创建自己的设备类型。

绘图设备

QWidget,QPixmap,QImage等,这些绘图设备为QPainter提供一个画布

paintEvent事件和绘图区

QWidget类及其子类是最常用的绘图设备,从QWidget类继承的类都有paintEvent()事件,要在设备上绘图,只需重定义此事件并编写响应代码。创建一个QPainter对象获取绘图设备的接口,然后就可以在绘图设备的画布上绘图了。

基本程序结构是:

void widget::paintEvent(QpaintEvent *event)

{

QPainter painter(this);//创建与绘图设备关联的QPainter对象

...//painter在设备的窗口上画图
}

窗口的左上角为(0,0),向右是X轴正方向,向下是Y轴的正方向。宽度由QWidget::width()函数获取,长度由QWidget::height()函数获取

属性:

pen属性: 是一个QPen对象,用于控制线条的颜色,宽度,线型等

brush属性:QBrush 笔刷,设置一个区域的填充特性,可以设置填充颜色,填充方式,渐变特性等。还可以采取图片做材质填充。

font属性:是一个QFont对象,用于绘制文字时,设置文字的字体样式,大小等属性。

QBrush

void setColor(QColor &color) 设置画刷颜色,实体填充时即为填充颜色

void setStyle(Qt::BrushStyle style) 设置画刷样式,参数为Qt::BrushStyle枚举类型

void setTexture(QPixmap &pixmap) 设置一个QPixmap类型的图片作为画刷的照片,画刷样式自动设置为Qt::TexturePattern

void setTextureImage(QImage &image) 设置一个QImage类型的图片作为画刷的图片,画刷样式自动设置为Qt::TexturePattern

第二部分:实战练习

目的:使用画笔话一个矩形,内部用黄色填充。

新建一个Qt项目,选择QWidget。在Widget.h文件中声明paintevent()函数,然后在.cpp中实现就行了。

widget.h:
#ifndef WIDGET_H

#define WIDGET_H

#include <QWidget>

#include<QPainter>

#include<QPaintEvent>

QT_BEGIN_NAMESPACE

namespace Ui { class Widget; }

QT_END_NAMESPACE

class Widget : public QWidget

{

    Q_OBJECT

public:

    Widget(QWidget *parent = nullptr);

    ~Widget();

protected:

    void paintEvent(QPaintEvent *eventoverride;

private:

    Ui::Widget *ui;

};

#endif // WIDGET_H

widget.cpp

构造函数widgte():
ui->setupUi(this);

    setPalette(QPalette(Qt::white));//设置窗口为白色背景

    setAutoFillBackground(true);

paintEvent()函数的实现:

QPainter painter(this);//创建QPainter对象

    painter.setRenderHint(QPainter::Antialiasing);//告诉绘图引擎应该在可能的情况下进行边的反锯齿绘制

    painter.setRenderHint(QPainter::TextAntialiasing);//尽可能的情况下文字的反锯齿绘制

    int w = this->width();//绘图区的宽度

    int h = this->height();//绘图区的高度

    QRect rect(w/4,h/4,w/2,h/2);//中间区域矩形框,前两个参数是绘图区的起始坐标,后两个参数绘图区的宽度和高度

    //设置画笔 必须得最后将画笔设置进painter对象中

    QPen pen;

    pen.setWidth(3);//线宽

    pen.setColor(Qt::red);//划线颜色

    pen.setStyle(Qt::SolidLine);//实线

    pen.setCapStyle(Qt::FlatCap);//线端点样式

    pen.setJoinStyle(Qt::BevelJoin);//线的连接点样式

    painter.setPen(pen);

    //设置画刷 必须得最后将画刷设置进painter对象中

    QBrush brush;

    brush.setColor(Qt::yellow);//画刷颜色

    brush.setStyle(Qt::SolidPattern);//画刷填充样式

    painter.setBrush(brush);

    //绘图

    painter.drawRect(rect);

这里注意下,将画笔和画刷设置进painter中前,必须将其属性设置完全。在将画笔/画刷设置进painter后,在修改其值不会该变设置进去的状态。

你可能感兴趣的:(Qt学习,qt,开发语言)