Qt繪圖事件:QPainter、QPaintEngine和QPaintDevice


一、繪圖,刷新界面的方法

1、繪圖事件

  一般在繪圖事件中繪圖

 1     void paintEvent(QPaintEvent *);//繪圖事件在窗口重繪的時候(即狀態改變)的時候調用
 2     {
 3         //1、創建畫家對象
 4         QPainter p(this);//指定當前窗口為繪圖設備
 5         
 6         //2、具體操作
 7         //畫背景圖    /* 不需要添加資源文件 */
 8         QPixmap("../Image/bk.png"));//參數:頂點坐標、長、寬   
 9         //p.drawPixmap(rect(), QPixmap("../Image/bk.png"));//參數:定點坐標,寬,高,圖片
10         
11         //畫直線        
12         #if 0
13         //定義畫筆     用以繪制輪廓線
14         QPen pen;
15         pen.setWidth(5); //設置線寬
16         //pen.setColor(Qt::red); //設置顏色
17         pen.setColor( QColor(14, 9, 234) );//rgb設置顏色
18         pen.setStyle(Qt::DashLine); //設置風格
19         //把畫筆交給畫家
20         p.setPen(pen);
21         #endif
22         p.drawLine(50,50,150,50);//起點和終點坐標
23         
24         //畫矩形
25         p.drawRect(50,50,150,150);
26         
27         //畫圓
28         p.drawEllipse(QPint(50,50),50,25);//參數:圓心    水平方向半徑    垂直方向半徑
29         #if 0//畫刷        用以用來填充
30             QBrush brush; //創建畫刷對象
31             brush.setColor(Qt::red); //設置顏色
32             brush.setStyle(Qt::Dense1Pattern);//設置樣式
33             p.setBrush(brush);//把畫刷交給畫家
34         #endif
35     }    

2、手動刷新
  update();//庫函數update,間接調用paintEvent

 

二、QBitmap和QPixmap
  QBitmap只有黑白2種顏色,而QPixmap彩色繪圖
  當不需要彩色的時候,可以使用QBitmap;因為QBitmap耗費資源少。

1 //QPixmap和QBitmap的使用方法基本相同
2 QPainter p(this);
3 p.drawPixmap(0,0, QPixmap("../image.png"));
4 p.drawPixmap(200,0, QBitmap("../image.png"));//參數3    彩色圖片顯示的也是黑白

 

三、常用的繪圖設備

  一般情況,QPixmap用於顯示;QImage用於傳輸;
1、QPixmap:針對屏幕進行優化,和平台相關,不能對圖片進行修改(像素點)

1 QPixmap pixmap(400,300);//直接指定繪圖設備的大小400*300
2 QPainter p(&pixmap);    //畫家
3 #if 0
4 //填充背景    
5     p.fillRect(0,0,400,300, QBrush(Qt::white));
6     pixmap.fill(Qt::white);
7 #endif
8 p.drawPixmap(0,0,80,80, QPixmap("../image/face.png"));
9 pixmap.save("../pixmap.jpg);    //保存畫家畫的圖片

2、QImage:和平台相關,可以對圖片進行修改,可以在線程中繪圖

 1 QImage image(400, 300, QImage::Format_ARGB32);//QImage::Format_ARGB32背景是透明
 2 QPainter p(&image);
 3 //繪圖
 4 p.drawImage(0, 0, QImage("../Image/face.png"));//drawPixmap()也行
 5 //對繪圖設備前50個像素點進行操作
 6 for(int i = 0; i < 50; i++)
 7 {
 8     for(int j = 0; j < 50; j++)
 9     {
10         image.setPixel(QPoint(i, j), qRgb(0, 255, 0));
11     }
12 }
13 image.save("../image.png");    

3、QPicture:保存繪圖的狀態(二進制文件)

1 QPicture picture;
2 QPainter p(&picture);
3 p.drawPixmap(0,0,80,80, QPixmap("../image/face.png"));
4 picture.save("../picture");//保存的是二進制文件
5 #if 0//加載QPicture圖片
6   QPicture pic;
7   pic.load("../picture");
8 #endif

4、QPixmap與QImage的轉換
//QImage用於傳輸、QPixmap用於顯示

 1 QPainter p(this);
 2 QPixmap pixmap;
 3 pixmap.load("../Image/face.png");
 4 //QPixmap -> QImage
 5 QImage tempImage = pixmap.toImage();
 6 p.drawImage(0, 0, tempImage);
 7 
 8 QImage image;
 9 image.load("../Image/face.png");
10 //QImage -> QPixmap
11 QPixmap tempPixmap = QPixmap::fromImage(image);
12 p.drawPixmap(100, 0, tempPixmap);

 


免責聲明!

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



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