日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt绘图事件:QPainter、QPaintEngine和QPaintDevice

發布時間:2024/4/15 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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);

?

轉載于:https://www.cnblogs.com/wangbin-heng/p/9484272.html

總結

以上是生活随笔為你收集整理的Qt绘图事件:QPainter、QPaintEngine和QPaintDevice的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。