【转载】使用QPainter的drawPixmap()绘制多幅图片

https://blog.csdn.net/u010111033/article/details/53785223

 

众所周知,使用QLabel的setPixmap()就可以将图片显示出来,做视屏解码后显示也可以如此。但是为何我今天还要费力使用基函数drawPixmap()来做绘图?理由有这么些吧:

1、使用QLabel很耗费CPU,播放画面过多有卡卡的感觉;

2、drawPixmap()使用GPU处理,相对减轻了CPU的负担;

当然,今天这里,只是给出基本思路方法,并非对视频解码后的图像做原样的解析。

那么,我们开始吧!

a、首先使用Qtcreator建立项目吧,我这里取名Painter,然后我在网上下载了4副图片,个人觉得还是挺漂亮的,一会展示给大家看;

b、下来新建文件夹,名字就叫images吧,此时了,便于使用,最好把图片名字改成便于自己记忆的。然后添加Qt资源,将4副图全部导入资源文件。

c、此时,我们回到项目的ui文件,在设计器里面,拖进来4个QFrame或者QWidget控件,我是拖进来4个QFrame的,因为可以勾划边框;

d、下来对命名后的4个QWidget使用网格布局吧;

e、此时回到paint的.h文件,加上几个头文件:

#include <QPixmap>
#include <QPaintEvent>
并在私有属性添加以下:
    QPixmap image1;
    QPixmap image2;
    QPixmap image3;
    QPixmap image4;
在protected方法里面添加:
    void paintEvent(QPaintEvent *);
f、好了,我们回到对应cpp文件吧,首先了,我们已经声明了几个QPixmap,我们需要对这几个变量处理,我在构造函数里:
    image1.load(":/images/chuyin1.jpg");
    image2.load(":/images/chuyin2.jpg");
    image3.load(":/images/chuyin3.jpg");
    image4.load(":/images/chuyin4.jpg");
此时,QPixmap已经与相对应的图片绑定了,下来我们需要让他显示出来:
void PaintWidget::paintEvent(QPaintEvent *)
{
    //void QPainter::drawPixmap(int x, int y, int width, int height, const QPixmap &pixmap)
    QPainter painter(this);
    int x1 = ui->view1Frame->pos().x();
    int y1 = ui->view1Frame->pos().y();
    painter.drawPixmap(x1,y1,ui->view1Frame->width(),ui->view1Frame->height(),image1);
 
    int x2 = ui->view2Frame->pos().x();
    int y2 = ui->view2Frame->pos().y();
    painter.drawPixmap(x2,y2,ui->view2Frame->width(),ui->view2Frame->height(),image2);
 
    int x3 = ui->view3Frame->pos().x();
    int y3 = ui->view3Frame->pos().y();
    painter.drawPixmap(x3,y3,ui->view3Frame->width(),ui->view3Frame->height(),image3);
 
    int x4 = ui->view4Frame->pos().x();
    int y4 = ui->view4Frame->pos().y();
    painter.drawPixmap(x4,y4,ui->view4Frame->width(),ui->view4Frame->height(),image4);
}
划//的部分是专门贴上来让大家知道怎么使用drawpixmap()函数的,当然也可以使用其他的重载。
哦,对了,使用了画笔,怎么不给声明标识?我们在此cpp的头文件里面加上:

#include <QPainter>
————————————————
版权声明:本文为CSDN博主「Little柯南」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010111033/article/details/53785223

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值