• 使用QPainter的drawPixmap()绘制多幅图片 good


    众所周知,使用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?
    1. #include <QPixmap>  
    2. #include <QPaintEvent>  

    并在私有属性添加以下:

    [cpp] view plain copy
     
     print?
    1. QPixmap image1;  
    2. QPixmap image2;  
    3. QPixmap image3;  
    4. QPixmap image4;  

    在protected方法里面添加:

    [cpp] view plain copy
     
     print?
    1. void paintEvent(QPaintEvent *);  

    f、好了,我们回到对应cpp文件吧,首先了,我们已经声明了几个QPixmap,我们需要对这几个变量处理,我在构造函数里:

    [cpp] view plain copy
     
     print?
    1. image1.load(":/images/chuyin1.jpg");  
    2. image2.load(":/images/chuyin2.jpg");  
    3. image3.load(":/images/chuyin3.jpg");  
    4. image4.load(":/images/chuyin4.jpg");  

    此时,QPixmap已经与相对应的图片绑定了,下来我们需要让他显示出来:

    [cpp] view plain copy
     
     print?
    1. void PaintWidget::paintEvent(QPaintEvent *)  
    2. {  
    3.     //void QPainter::drawPixmap(int x, int y, int width, int height, const QPixmap &pixmap)  
    4.     QPainter painter(this);  
    5.     int x1 = ui->view1Frame->pos().x();  
    6.     int y1 = ui->view1Frame->pos().y();  
    7.     painter.drawPixmap(x1,y1,ui->view1Frame->width(),ui->view1Frame->height(),image1);  
    8.   
    9.     int x2 = ui->view2Frame->pos().x();  
    10.     int y2 = ui->view2Frame->pos().y();  
    11.     painter.drawPixmap(x2,y2,ui->view2Frame->width(),ui->view2Frame->height(),image2);  
    12.   
    13.     int x3 = ui->view3Frame->pos().x();  
    14.     int y3 = ui->view3Frame->pos().y();  
    15.     painter.drawPixmap(x3,y3,ui->view3Frame->width(),ui->view3Frame->height(),image3);  
    16.   
    17.     int x4 = ui->view4Frame->pos().x();  
    18.     int y4 = ui->view4Frame->pos().y();  
    19.     painter.drawPixmap(x4,y4,ui->view4Frame->width(),ui->view4Frame->height(),image4);  
    20. }  

    划//的部分是专门贴上来让大家知道怎么使用drawpixmap()函数的,当然也可以使用其他的重载。

    哦,对了,使用了画笔,怎么不给声明标识?我们在此cpp的头文件里面加上:

    [cpp] view plain copy
     
     print?
    1. #include <QPainter>  

    好了,大功告成。编译、运行,你看下面就是显示出来的图像:



    怎么样?还不错吧!我们点击标题栏,进行放大,图片也跟着放大了。

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

  • 相关阅读:
    Quartz定时调度CronTrigger时间配置格式说明与实例
    JAVA中堆和栈的区别
    s:iterator循环输出数字
    JAVA 遍历文件夹下的所有文件(递归调用和非递归调用)
    FilenameFilter总结
    Oracle sql"NOT IN"语句优化,查询A表有、B表没有的数据
    Java并发教程(Oracle官方资料)
    做考试系统用到的关于onbeforeunload一些兼容性问题
    Java集合类ArrayList循环中删除特定元素
    Log4j写入数据库详解
  • 原文地址:https://www.cnblogs.com/findumars/p/6380406.html
Copyright © 2020-2023  润新知