博客出處:http://www.devdiv.com/thread-39111-1-1.html
折騰了幾天,終於實現了圖片的淡出淡入的效果。 其實也應該是說實現了圖片的淡入效果,因為淡出效果我暫時還用不到,但原理還是一樣的。
網上關於圖片的淡出淡入效果的討論蠻多的,但是用QT實現就很少了。實現這種效果有兩種途徑:一是讀取圖片的RGB值,然后漸進達到淡出淡入的效果,這種方法我沒有嘗試,感覺還是比較復雜。二是設置加載圖片載體的透明度,從完全透明到完全顯示,控制這個過程可以用過定時器(QTimer)來實現。
我是用QLabel加載圖片的,主要運用到QTimer和QGraphicOpacityEffect這兩個控制類。下面我說一下實現這種效果的步驟:
<1> 把label的屬性背景透明度設置為透明,注意這並不能使你的圖片變為透明,因為這只是使得label的邊框,背景色彩消失而已。
- ui->label->setAttribute(Qt::WA_TranslucentBackground, true);
<2> 加載圖片,這個就不多說了,我是加載了一張gif圖片,是靜態的gif圖片- -。
- ui->label->setPixmap(QPixmap("path"));
<3> 把加載了圖片的label設置完全透明
- float opacity=0.0;
- QGraphicOpacityEffect *effect=new QGraphicOpacityEffect()'
- effect->setIOpacity(opacity);//透明范圍為0.0-1.0,默認為0.7 ui->label->setGraphicEffect(effect);
<4> 利用QTimer實現漸變過程
- QTimer timer;
- QObject::connect(&timer,SIGNAL(timeout()),this,SLOT(fade_on_fade_out()));
- timer.start(250);//每隔250毫秒發射一次timeout()
<5>在槽函數fade_on_fade_out()實現漸變功能
- void fade_on_fade_in()
- { if(opacity>=1.0)
- }
- {
- timer.stop();//定時器停止
- }
- else
- {
- effect->setOpacity(opacity);
- ui->label->setGraphicsEffect(effect);
- }
- opacity+=0.1;//透明度累加
- }
<6>完成。