使用QPainter的drawPixmap()绘制多幅图片 good
2017-02-09 00:11
633 查看
众所周知,使用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文件,加上几个头文件:
[cpp] view plain copy
print?
#include <QPixmap>
#include <QPaintEvent>
并在私有属性添加以下:
[cpp] view plain copy
print?
QPixmap image1;
QPixmap image2;
QPixmap image3;
QPixmap image4;
在protected方法里面添加:
[cpp] view plain copy
print?
void paintEvent(QPaintEvent *);
f、好了,我们回到对应cpp文件吧,首先了,我们已经声明了几个QPixmap,我们需要对这几个变量处理,我在构造函数里:
[cpp] view plain copy
print?
image1.load(":/images/chuyin1.jpg");
image2.load(":/images/chuyin2.jpg");
image3.load(":/images/chuyin3.jpg");
image4.load(":/images/chuyin4.jpg");
此时,QPixmap已经与相对应的图片绑定了,下来我们需要让他显示出来:
[cpp] view plain copy
print?
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的头文件里面加上:
[cpp] view plain copy
print?
#include <QPainter>
好了,大功告成。编译、运行,你看下面就是显示出来的图像:
怎么样?还不错吧!我们点击标题栏,进行放大,图片也跟着放大了。
http://blog.csdn.net/u010111033/article/details/53785223
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文件,加上几个头文件:
[cpp] view plain copy
print?
#include <QPixmap>
#include <QPaintEvent>
并在私有属性添加以下:
[cpp] view plain copy
print?
QPixmap image1;
QPixmap image2;
QPixmap image3;
QPixmap image4;
在protected方法里面添加:
[cpp] view plain copy
print?
void paintEvent(QPaintEvent *);
f、好了,我们回到对应cpp文件吧,首先了,我们已经声明了几个QPixmap,我们需要对这几个变量处理,我在构造函数里:
[cpp] view plain copy
print?
image1.load(":/images/chuyin1.jpg");
image2.load(":/images/chuyin2.jpg");
image3.load(":/images/chuyin3.jpg");
image4.load(":/images/chuyin4.jpg");
此时,QPixmap已经与相对应的图片绑定了,下来我们需要让他显示出来:
[cpp] view plain copy
print?
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的头文件里面加上:
[cpp] view plain copy
print?
#include <QPainter>
好了,大功告成。编译、运行,你看下面就是显示出来的图像:
怎么样?还不错吧!我们点击标题栏,进行放大,图片也跟着放大了。
http://blog.csdn.net/u010111033/article/details/53785223
相关文章推荐
- QT 如何实现使用 QPainter 的 drawPixmap() 函数将图片文件绘制到一个 QLabel、QPushButton 或者其他的一些设备上?
- 【Qt】使用QPainter的drawPixmap()绘制多幅图片
- qt中如果使用svg格式的图片在QPainter中绘制图形
- 使用CGContextDrawImage绘制图片上下颠倒
- android中使用Canvas绘制指定位置和宽高度的图片
- 使用CImage绘制半透明图片
- 使用WPF绘制图片(一)
- 使用Servlet绘制动态的数字图片
- 使用MFC CImage类绘制PNG图片时遇到的问题
- 使用QPainter绘制图形
- 【Android LibGDX游戏引擎开发教程】第06期:图形图像的绘制(下)图片整合工具的使用
- [Tool]手动绘制loading效果(不使用图片)
- 【Android LibGDX游戏引擎开发教程】第06期:图形图像的绘制(下)图片整合工具的使用
- Android中View(视图)绘制不同状态背景图片原理深入分析以及StateListDrawable使用详解
- 使用UIImage进行图片的直接绘制【不该犯的错都犯了】
- Android中View(视图)绘制不同状态背景图片原理深入分析以及StateListDrawable使用详解
- 一个图片加载与绘制类(使用GDI输出图片)【补充】
- 一个图片加载与绘制类(使用GDI输出图片)
- 使用WPF绘制图片(三)
- 如何使用php绘制在图片上的正余弦曲线