【QT】绘图API

        

目录

绘图API核心类 

第一步:重写paintEvent事件函数

第二步:创建QPainter

第三步:设置QPainter绘制的文字类型(非必须)

第四步:设置画笔属性(线条)

第五步:设置画刷的属性(填充)

第六步:开始绘制

绘制线段

绘制矩形

绘制圆形 

绘制文本

绘制图片

基础绘制

缩放绘制

图片旋转

图片平移


        前面介绍的Qt的各种控件,本质上都是画出来的,都是Qt已经提前画好的,拿过来就能使用,实际开发中,很可能出现现有的控件无法满足需求,需要自己diy一些控件/效果,Qt提供的绘图API就是为了解决上述问题的。

绘图API核心类 

说明
QPainter
"绘画者" 或者 "画家".
用来绘图的对象, 提供了⼀系列 drawXXX ⽅法, 可以允许我们绘制各种图
形.
QPaintDevice
“画板".
描述了 QPainter 把图形画到哪个对象上. 像咱们之前⽤过的 QWidget 也
是⼀种 QPaintDevice (QWidget 是 QPaintDevice 的⼦类)
QPen
”画笔".
描述了 QPainter 画出来的线是什么样的.
QBrush
"画刷".
描述了 QPainter 填充⼀个区域是什么样的.

画图相关的操作,一般不会放到QWidget的构造函数中调用执行,而是提供了一个paintEvent事件处理函数,在这里进行调用。

第一步:重写paintEvent事件函数

在头文件中声明paintEvent函数

void paintEvent(QPaintEvent *event);

 在.cpp文件中定义该函数

void Widget::paintEvent(QPaintEvent *event)
{
    //无实际意义,避免警告而已
    (void)event;
}

第二步:创建QPainter

QPainter painter(this);

第三步:设置QPainter绘制的文字类型(非必须)

QFont font("微软雅黑",24);
painter.setFont(font);

第四步:设置画笔属性(线条)

    //设置画笔属性
    QPen pen;
    //设置成蓝色的线条
    pen.setColor(QColor(0,0,255));
    //设置线条的粗细
    pen.setWidth(5);
    //设置线条的风格
    pen.setStyle(Qt::DashLine);
    //让painter对象应用pen对象
    painter.setPen(pen);

第五步:设置画刷的属性(填充)

画刷的style取值可以如下,也就是填充效果

//设置画刷属性
QBrush brush;
brush.setColor(QColor(0,0,255));
brush.setStyle(Qt::Dense5Pattern);
painter.setBrush(brush);

painter.drawEllipse(200,200,400,100);

如果要实现不同的填充效果,可以继续更改brush的style即可 

 效果如下:

第六步:开始绘制

绘制线段

void drawLine(const QPoint &p1, const QPoint &p2);
参数:
        p1:绘制起点坐标
        p2:绘制终点坐标

示例:

    //创建QPainter对象
    QPainter painter(this);
    //设置QPainter绘制的字体属性
    QFont font("微软雅黑",24);
    painter.setFont(font);

    //设置画笔属性
    QPen pen;
    //设置成蓝色的线条
    pen.setColor(QColor(0,0,255));
    //设置线条的粗细
    pen.setWidth(5);
    //设置线条的风格
    pen.setStyle(Qt::SolidLine);
    //让painter对象应用pen对象
    painter.setPen(pen);

    //开始绘制
    painter.drawLine(100,100,200,100);

效果:

绘制矩形

void QPainter::drawRect(int x , int y , int width , int height )
参数:
        x:窗⼝横坐标;
        y:窗⼝纵坐标;
        width:所绘制矩形的宽度;
        height:所绘制矩形的⾼度;

示例:

    painter.drawRect(100,100,200,200);

效果:

绘制圆形 

void QPainter::drawEllipse(const QPoint & center , int rx , int ry )
参数:
        center:中心点坐标
        rx:横坐标
        ry:纵坐标

示例:

前两个参数指定圆心,后面两个参数指定外接矩形的宽度和高度 

    painter.drawEllipse(200,200,100,100);

 效果

如果我们宽度或者高度不一样的话,他会产生一个椭圆的效果。 

绘制文本

QPainter类 中不仅提供了绘制图形的功能,还可以使⽤ QPainter::drawText() 函数来绘制⽂字,也可以使⽤QPainter::setFont() 设置字体等信息。
这里的前两个参数,0横坐标表示的是文字最左侧的位置,100纵坐标表示的是文字的基线位置,所谓基线就是四线个中的第三条,如下:

示例:

painter.drawText(0,100,"hello");

效果如下:

绘制图片

Qt 提供了四个类来处理图像数据:QImage、QPixmap、QBitmap 和 QPicture,它们都是常⽤的绘图设备。
  • QImage主要⽤来进行 I/O 处理,它对 I/O 处理操作进⾏了优化,⽽且可以⽤来直接访问和操作像素;
  • QPixmap 主要⽤来在屏幕上显⽰图像,它对在屏幕上显⽰图像进⾏了优化;
  • QBitmap是 QPixmap 的子类,⽤来处理颜⾊深度为1的图像,即只能显示黑白两种颜⾊;
  • QPicture ⽤来记录并重演 QPainter 命令

基础绘制

前两个参数为从哪个坐标开始绘制图案

    QPixmap pixmap(":/background.jpg");
    painter.drawPixmap(100,100,pixmap);

缩放绘制

前两个参数还是与基础绘制一样,400和300 分别是缩放后图片的宽度和高度

    QPixmap pixmap(":/background.jpg");
    painter.drawPixmap(100,100,400,300,pixmap);

图片旋转

图片旋转,本质上是把QPainter对象进行了旋转,绘制出来的内容也就产生了旋转。

旋转180度

painter.rotate(180);

这个旋转是绕着(0,0)坐标系原点进行的旋转,因此如果我们直接旋转的话,图像可能超出窗口,无法看到效果,所以我们还要进行平移 。

图片平移

这里我们平移是把坐标系原点(painter的起点)平移一下,这里是负的是因为我们之前将整个坐标系旋转了180度所以这里要平移到窗口内,需要取负值

painter.translate(-800,-600);

  • 32
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值