qt 在指定區域添加圖片


博客出處:http://www.devdiv.com/thread-39111-1-1.html

折騰了幾天,終於實現了圖片的淡出淡入的效果。 其實也應該是說實現了圖片的淡入效果,因為淡出效果我暫時還用不到,但原理還是一樣的。


       網上關於圖片的淡出淡入效果的討論蠻多的,但是用QT實現就很少了。實現這種效果有兩種途徑:一是讀取圖片的RGB值,然后漸進達到淡出淡入的效果,這種方法我沒有嘗試,感覺還是比較復雜。二是設置加載圖片載體的透明度,從完全透明到完全顯示,控制這個過程可以用過定時器(QTimer)來實現。

      我是用QLabel加載圖片的,主要運用到QTimer和QGraphicOpacityEffect這兩個控制類。下面我說一下實現這種效果的步驟:

<1>   把label的屬性背景透明度設置為透明,注意這並不能使你的圖片變為透明,因為這只是使得label的邊框,背景色彩消失而已。

  1. ui->label->setAttribute(Qt::WA_TranslucentBackground, true);
復制代碼

<2>   加載圖片,這個就不多說了,我是加載了一張gif圖片,是靜態的gif圖片- -。

  1. ui->label->setPixmap(QPixmap("path"));
復制代碼

<3>   把加載了圖片的label設置完全透明

  1. float opacity=0.0;
  2. QGraphicOpacityEffect *effect=new QGraphicOpacityEffect()'
  3. effect->setIOpacity(opacity);//透明范圍為0.0-1.0,默認為0.7  ui->label->setGraphicEffect(effect);  
復制代碼

<4> 利用QTimer實現漸變過程

  1. QTimer timer;
  2. QObject::connect(&timer,SIGNAL(timeout()),this,SLOT(fade_on_fade_out()));
  3. timer.start(250);//每隔250毫秒發射一次timeout()
復制代碼

<5>在槽函數fade_on_fade_out()實現漸變功能

  1. void fade_on_fade_in()
  2. {        if(opacity>=1.0)
  3. }
  4.     {
  5.         timer.stop();//定時器停止
  6.     }
  7.     else
  8.     {
  9.         effect->setOpacity(opacity);
  10.         ui->label->setGraphicsEffect(effect);
  11.        }
  12.     opacity+=0.1;//透明度累加
復制代碼

<6>完成。


免責聲明!

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



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