gitee链接:
QMySnackBar: Qt QPropertyAnimation 实现QSnackBar QTopBar QLeftBar控件效果
创建一个名为MySnackbar
的自定义小部件:
-
导入所需的Qt模块和类:在代码的开头,导入
QDebug
、QHBoxLayout
、QPauseAnimation
、QPushButton
和QResizeEvent
等所需的Qt模块和类。 -
定义
MySnackbar
类:创建一个名为MySnackbar
的自定义小部件类,并继承自QWidget
类。在构造函数中,接受一个QWidget*
类型的父窗口指针,并将其保存在parent_widget
成员变量中。 -
初始化动画:创建一个名为
initAnimation
的私有函数,用于初始化小部件的动画效果。在该函数中,首先获取父窗口的宽度和高度,并计算出按钮的宽度和高度。然后设置小部件的初始位置和大小,并将窗口标志设置为无边框。 -
创建动画对象:使用
QPropertyAnimation
类创建三个动画对象,分别用于小部件的上升、悬停和下降动画效果。设置动画的起始值、结束值、持续时间和缓动曲线。 -
创建动画组:使用
QSequentialAnimationGroup
和QParallelAnimationGroup
类创建动画组对象,用于管理动画的播放顺序和并行播放。将动画对象添加到动画组中,并设置悬停动画的持续时间。 -
//上升 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
类创建一个水平布局,并将按钮添加到布局中。 -
连接信号和槽:使用
connect
函数将动画组的finished
信号连接到一个lambda表达式槽函数,以在动画结束后隐藏小部件。 -
实现其他功能函数:实现其他功能函数,如设置小部件的大小、样式表和停留时间等。
-
显示消息:实现
showMessage
函数,用于显示消息。在该函数中,设置按钮的文本,并根据父窗口的位置和大小计算小部件的初始位置。根据需要调整小部件的大小。设置动画的起始值和结束值,并显示小部件。启动动画组以播放动画效果。
可自行扩展功能函数 定制化功能!
gitee链接:
QMySnackBar: Qt QPropertyAnimation 实现QSnackBar QTopBar QLeftBar控件效果