Qt文本的淡入淡出
对于写在Qlabel中的文本,想对其实现淡入和淡出的特效,需要用到QGraphicsOpacityEffect,并搭配计时器使用。
示例如下。
.h文件:
#include <QGraphicsOpacityEffect>
#include <QTImer>
QTimer *opacity_timer = nullptr;
QGraphicsOpacityEffect *effect = nullptr;
QLabel *meet = nullptr;
float opa_level = 0;
bool lighter = true;
.cpp文件
构造函数{
meet = new QLabel(this);
meet -> move(130,500);
meet -> setText("Test");
meet -> setStyleSheet("color:white;font-size:32pt;font-family:黑体;");
effect = new QGraphicsOpacityEffect(this);
effect->setOpacity(opa_level);
meet -> setGraphicsEffect(effect);
opacity_timer = new QTimer(this);
connect(opacity_timer,SIGNAL(timeout()),this,SLOT(opacitySlot()));
opacity_timer -> start(30);
connect(this,SIGNAL(opacity_timer_stop()),this, SLOT(opacity_timer_shutdown()));
}
void opacitySlot()
{
if(lighter) //淡入
{
opa_level += 0.02;
effect->setOpacity(opa_level);
meet -> setGraphicsEffect(effect);
if(opa_level > 1){
QEventLoop eventloop;
QTimer::singleShot(3000, &eventloop, SLOT(quit())); //持续3秒
eventloop.exec();
lighter = false;
}
}
else //淡出
{
opa_level -= 0.02;
effect->setOpacity(opa_level);
meet -> setGraphicsEffect(effect);
if(opa_level < 0){
meet -> hide();
emit(opacity_timer_stop());
}
}
}
void opacity_timer_shutdown()
{
opacity_timer -> stop();
}
这样最终的效果就是Test文本慢慢显现,显示3秒后又慢慢消失。