QT 使用Pixmap繪製圖像
阿新 • • 發佈:2019-01-30
眾所周知,使用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;
-
void
- image1.load(":/images/chuyin1.jpg");
- image2.load(":/images/chuyin2.jpg");
- image3.load(":/images/chuyin3.jpg");
- image4.load(":/images/chuyin4.jpg");
-
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);
- }
哦,對了,使用了畫筆,怎麼不給宣告標識?我們在此cpp的標頭檔案裡面加上:
- #include <QPainter>
怎麼樣?還不錯吧!我們點選標題欄,進行放大,圖片也跟著放大了。