使用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM