QSnackBar QPropertyAnimation实现小弹窗,侧边栏,按钮渐变!(附源码链接)

文章介绍了如何创建一个名为MySnackBar的自定义QWidget子类,使用Qt的QPropertyAnimation实现QSnackBar和类似QTopBar、QLeftBar的效果,包括上升、悬停和下降动画。作者详细展示了如何初始化动画、创建动画组和按钮布局,以及如何根据父窗口调整小部件的显示和隐藏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 gitee链接:
QMySnackBar: Qt QPropertyAnimation 实现QSnackBar QTopBar QLeftBar控件效果

创建一个名为MySnackbar的自定义小部件:

  1. 导入所需的Qt模块和类:在代码的开头,导入QDebugQHBoxLayoutQPauseAnimationQPushButtonQResizeEvent等所需的Qt模块和类。

  2. 定义MySnackbar类:创建一个名为MySnackbar的自定义小部件类,并继承自QWidget类。在构造函数中,接受一个QWidget*类型的父窗口指针,并将其保存在parent_widget成员变量中。

  3. 初始化动画:创建一个名为initAnimation的私有函数,用于初始化小部件的动画效果。在该函数中,首先获取父窗口的宽度和高度,并计算出按钮的宽度和高度。然后设置小部件的初始位置和大小,并将窗口标志设置为无边框。

  4. 创建动画对象:使用QPropertyAnimation类创建三个动画对象,分别用于小部件的上升、悬停和下降动画效果。设置动画的起始值、结束值、持续时间和缓动曲线。

  5. 创建动画组:使用QSequentialAnimationGroupQParallelAnimationGroup类创建动画组对象,用于管理动画的播放顺序和并行播放。将动画对象添加到动画组中,并设置悬停动画的持续时间。

  6.   //上升
        pPos_start_Animation = new QPropertyAnimation(this, "pos");
        pPos_start_Animation->setDuration(500);
        pPos_start_Animation->setStartValue(QPoint(posX, posY));
        pPos_start_Animation->setEndValue(QPoint(posX, posY - snack_height));
        pPos_start_Animation->setEasingCurve(QEasingCurve::InOutQuad);
    
        // 悬停动画
        pPause_Animation = new QPauseAnimation(500);
    
        // 下降动画
        pPos_back_Animation = new QPropertyAnimation(this, "pos");
        pPos_back_Animation->setDuration(500);
        pPos_back_Animation->setStartValue(QPoint(posX, posY - snack_height));
        pPos_back_Animation->setEndValue(QPoint(posX, posY));
        pPos_back_Animation->setEasingCurve(QEasingCurve::InOutQuad);
    
        pPosGroup = new QSequentialAnimationGroup(this);
        pPosGroup->addPause(500);
        pPosGroup->addAnimation(pPos_start_Animation);
        pPosGroup->addAnimation(pPause_Animation);
        pPosGroup->addAnimation(pPos_back_Animation);
    
        m_group = new QParallelAnimationGroup(this);
        m_group->addAnimation(pPosGroup);
    

    创建按钮和布局:创建一个QPushButton对象作为小部件的按钮,并设置按钮的最小大小。使用QHBoxLayout类创建一个水平布局,并将按钮添加到布局中。

  7. 连接信号和槽:使用connect函数将动画组的finished信号连接到一个lambda表达式槽函数,以在动画结束后隐藏小部件。

  8. 实现其他功能函数:实现其他功能函数,如设置小部件的大小、样式表和停留时间等。

  9. 显示消息:实现showMessage函数,用于显示消息。在该函数中,设置按钮的文本,并根据父窗口的位置和大小计算小部件的初始位置。根据需要调整小部件的大小。设置动画的起始值和结束值,并显示小部件。启动动画组以播放动画效果。

 可自行扩展功能函数 定制化功能!

gitee链接:
QMySnackBar: Qt QPropertyAnimation 实现QSnackBar QTopBar QLeftBar控件效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值