QT 在添加圖片的label上畫圖


第一種方法:

1.需要重載QLabel。

2.重載QPainter

下面是我寫的一個畫在label上的隨滑動條變化的指針盤。

 1 #include "mylabel.h"
 2 //重載的QLabel為自己的
 3 myLabel::myLabel(QWidget *parent)
 4     :QLabel(parent),valueSlider(0)
 5 {
 6    //在label上加圖片
 7     this->setStyleSheet("border-image: url(:/image/1.png)");
 8    //滑動條
 9     _slider = new QSlider(this);
10     _slider->setRange(0,200);
11     _slider->setOrientation(Qt::Horizontal);
12     connect(_slider,SIGNAL(valueChanged(int)),this,SLOT(slot_ScroolWidget(int)));
13    //定義的指針
14     _svg_needle = new QSvgRenderer(this);
15     _svg_needle->load(QString::fromLocal8Bit(":/image/needle.svg"));
16 }
17 
18 myLabel::~myLabel()
19 {
20 
21 }
22 
23 
24 void myLabel::slot_ScroolWidget(int value)
25 {
26     valueSlider = value;
27     update();
28 }
29 
30 void myLabel::resizeEvent(QResizeEvent *event)
31 {
32   //滑動條的位置
33     _slider->setGeometry(250,440,301,41);
34 }
35 
36 //重載的painter
37 void myLabel::paintEvent(QPaintEvent *event)
38 {
39         QPainter painter(this);
40 41 
42         painter.setRenderHints(QPainter::Antialiasing);
43 
44         painter.save();
45         QTransform trans;
46         trans.translate(rect().width()/2.0+10, rect().height()-140);
47         trans.rotate(((valueSlider) * (180.0 / 200)));
48         trans.translate(-rect().width()/2.0, -rect().height()/2.0);
49         painter.setWorldTransform(trans);
50         //
51         //寬、高都需要計算
52         int h = 4.0 * rect().height()/210.0;
53         _svg_needle->render(&painter, QRectF(rect().left()/2.0+232, (rect().height() - h)/2.0, 168, 16));
54 
55         painter.restore();
56         painter.end();}

第二種方法:

相對於第一種方法比較簡單,但是在有動畫效果的時候會達不到預期的效果。

1  QImage image(1000,1000,QImage::Format_ARGB32);//定義圖片,在圖片上畫
2   painter.begin(&image);
3      ..........
4      .........
5      ........       //需要畫的內容
6      
7  
8  //畫在label上
9  ui->painterLabel->setPixmap(QPixmap::fromImage(image));

 


免責聲明!

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



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