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