Qt文本的淡入淡出

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秒后又慢慢消失。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值