当前位置: 首页 > news >正文

QGraphicsEffect控件添加特效

目录

 一、QGraphicsEffect基本概念

二、常见子类应用

2.1 QGraphicsDropShadowEffect

2.2 QGraphicsBlurEffect

2.3 QGraphicsColorizeEffect

2.4 QGraphicsOpacityEffect


 一、QGraphicsEffect基本概念

        QGraphicsEffect 是 Qt 中用于为控件添加图形视觉效果的基类,例如模糊、阴影、色调调整和透明度变化等。它不改变控件本身的几何结构,而是在绘制阶段对控件的像素内容进行后期处理,从而实现美观且性能较高的视觉特效。

二、常见子类应用


2.1 QGraphicsDropShadowEffect

添加阴影效果,常用于按钮、弹窗提升层次感。

{
    QGraphicsDropShadowEffect *shadow = new QGraphicsDropShadowEffect;
    shadow->setBlurRadius(8);//设置阴影的模糊半径 阴影边缘将有 8 像素的模糊扩散范围 数值越大越虚 越小约贴近边缘
    shadow->setColor(QColor(0, 0, 0, 100));//黑色作为阴影 透明度(Alpha)= 100(范围 0~255) 半透明黑色可以避免阴影显得过于生硬,使整体视觉更自然
    shadow->setOffset(2, 2);//设置阴影相对于原始控件的偏移量。
    /*第一个参数 2:水平方向向右偏移 2 像素;第二个参数 2:垂直方向向下偏移 2 像素;
    模拟“光源来自左上方”的自然光照效果,这也是大多数 UI 风格所采用的标准投影方向。
    若设置为(0, 0),则阴影居中于控件下方,看起来像“浮空”但无方向感。*/
    ui.pushButton->setGraphicsEffect(shadow);
}

2.2 QGraphicsBlurEffect

实现高斯模糊,可用于背景虚化、对话框蒙层。
{
    // 对组件内容应用模糊(模拟模态背景)
    QGraphicsBlurEffect *blurEffect = new QGraphicsBlurEffect;
    blurEffect->setBlurRadius(8);
    ui.mainwindow->setGraphicsEffect(blurEffect);
    //...授权验证
    
    
    if(authority)
    { // 3秒后关闭模糊效果(模拟加载完成)
        QTimer::singleShot(3000, [&]() {
            ui.mainwindow.setGraphicsEffect(nullptr); // 恢复清晰
        });
    }
}

2.3 QGraphicsColorizeEffect

为控件整体着色,适用于主题切换或状态提示。

{

    QGraphicsColorizeEffect *colorize = new QGraphicsColorizeEffect;
    colorize->setColor(Qt::red);
    colorize->setStrength(0.6);//设置颜色叠加效果的强度0-1
    ui.label_9->setGraphicsEffect(colorize);


    static bool isBright = true;
    QTimer *timer = new QTimer(this);
    QObject::connect(timer, &QTimer::timeout, [=]() {
        if (ui.label_9)
        {
            QGraphicsEffect* effect = ui.label_9->graphicsEffect();
            if (effect && dynamic_cast<QGraphicsColorizeEffect*>(effect) == colorize) {
                colorize->setStrength(isBright ? 0.8 : 0.3);
                isBright = !isBright;
            }
            else {
                // 如果 label 或 effect 不存在了,停止定时器防止继续崩溃
                timer->stop();
            }
        }});
    timer->start(500);
}

        结合属性动画QPropertyAnimation实现呼吸灯效果提示QPropertyAnimation 用它来平滑地改变一个对象的某个属性值,在指定的时间内从起始值过渡到结束值,从而产生流畅的动画效果。
        与直接使用 QTimer 定时修改属性不同,QPropertyAnimation 不仅自动完成“插值计算”,还支持缓动曲线(Easing Curves),使动画具有缓入、缓出、弹跳等自然视觉效果,让界面更生动。
{
    // 创建颜色高亮效果
    QGraphicsColorizeEffect *colorize = new QGraphicsColorizeEffect;
    colorize->setColor(Qt::red);              // 设置为红色
    colorize->setStrength(0.6);               // 初始强度
    ui.label_9->setGraphicsEffect(colorize);  // 应用到 label

    // 创建属性动画:在 strength 属性上做动画
    QPropertyAnimation *anim = new QPropertyAnimation(colorize, "strength");
    anim->setStartValue(0.3);                // 弱红
    anim->setEndValue(0.8);                  // 强红
    anim->setDuration(600);                  // 动画时长(毫秒),控制呼吸频率
    anim->setLoopCount(-1);                  // 无限循环
    //anim->setEasingCurve(QEasingCurve::InOutSine); // 平滑呼吸感(比 SineCurve 更自然)
    anim->setEasingCurve(QEasingCurve::SineCurve);

    anim->start(QAbstractAnimation::DeleteWhenStopped); // 自动释放内存
}

2.4 QGraphicsOpacityEffect

控制控件的透明度,支持渐显/渐隐动画。
QGraphicsOpacityEffect 透明效果 实现控件的透明度,结合属性动画QPropertyAnimation实现控件淡入淡出等效果
{
    ui.label_9->setGraphicsEffect(new QGraphicsOpacityEffect);

    QGraphicsOpacityEffect *effect = qobject_cast<QGraphicsOpacityEffect*>(ui.label_9->graphicsEffect());
    QPropertyAnimation *anim = new QPropertyAnimation(effect, "opacity");
    anim->setDuration(10000);           // 动画持续1秒
    anim->setStartValue(0.0);          // 起始完全透明
    anim->setEndValue(1.0);            // 结束完全显示
    anim->setEasingCurve(QEasingCurve::OutQuad);

    anim->start(QAbstractAnimation::DeleteWhenStopped);
    ui.label_9->show();
}
 

http://www.dtcms.com/a/542709.html

相关文章:

  • 80s无水印视频素材网站下载无水印logo免费一键生成
  • 维护网站建设空间出租搜索引擎营销怎么做
  • 做版权保护的网站湖南网站建设制作
  • 广州门户网站建设wordpress改登录界面
  • 东莞市建设局网站公司网站建设注册
  • 网站备案怎么办网络空间安全考研
  • 通州网站建设是什么wordpress 4.7.2 被黑
  • 新乐网站制作价格商标注册名字查询系统
  • 网站建设专业介绍佛山应用软件开发
  • 宁波网站推广在哪里一个网站多个域名的seo优化
  • 长春seo公司网站制作网站优化
  • 【win11】funasr 2:安装了两套miniconda环境咋办
  • 购买源码的网站建设通破解vip
  • 佛山营销网站建设制作快速生成网站
  • 滨海网站建设网站子网页设计
  • 网站开发属于无形资产大一网页设计代码英语
  • 设计素材网站推荐pin优化大师怎么卸载
  • 播放bilibili视频,视频正常加载,但是无法播放一直转圈。机型拯救者R9000P 2023
  • 江西商城网站建设公司湛江seo推广公司
  • 北京app外包公司哪家好企业网站的搜索引擎推广与优化
  • 网站海报是怎么做的如何自己开发网站
  • 网站建设规划结构wordpress the7 3.80
  • 【u-boot】重定位(ARM64)-relocate_code
  • 金泉网做网站多少钱seo 网站优化推广排名教程
  • 苏州网站建设名字即墨网站开发公司
  • 苏州网站关键词优化推广色轮 网站
  • 个体制作网站设计推广公司网站有哪些方式
  • 网站制作费用低效果图制作属于什么经营范围
  • 十大不收费看盘软件网站视频教程网站
  • 滨州网站建设phpiwordpress大前端主题美化