当前位置:网站首页>QT中的QPropertyAnimation使用和toast案列
QT中的QPropertyAnimation使用和toast案列
2022-07-02 17:45:00 【疯狂的挖掘机】
文章目录
0 引入
最近使用学习到动画这一块,无意中接触到使用QPropertyAnimation来完成 类似 toast效果的东西

主要功能:
1、toast实现位置可以根据父窗口而改变;
2、显示时间默认是一分钟,可调
1、QPropertyAnimation自带效果
QPropertyAnimation是Qt自带的动画类,该类可以实现简单的控件动画效果,比如对控件的移动、缩放、不透明度这些来做动画效果(使用某效果之前需要使用setPropertyName函数指定需要的动画属性名,以下三个是Qt已经定义好的)。
1、移动(pos):主要实现移动效果,如从某个点移动到另一个点,所使用的变量类型为QPoint等。
2、缩放(geometry):可实现缩放和移动效果,该属性可以实现指定控件的缩放,并且在缩放的基础上还能实现移动。
3、不透明度(windowOpacity):实现控件的透明度设置(不过该属性只能对顶级窗口使用,对普通控件这些无效)。
2、QPropertyAnimation自定义效果
见引用。
3、QPropertyAnimation toast实现
1.toast头文件
代码如下(示例):
#ifndef TOAST_H
#define TOAST_H
#include <QtWidgets/QWidget>
#include <QLabel>
class Toast : public QWidget
{
Q_OBJECT
public:
Toast(QWidget *parent = Q_NULLPTR);
~Toast();
void setText(const QString& text);
void showAnimation(int timeout = 500);
void movetoPosition(int x,int y);
static void showTip(const QString& text,int x,int y,QWidget* parent = nullptr);
private:
QLabel *label = nullptr;
QWidget *widget = nullptr;
};
#endif // TOAST_H
2.toast cpp
代码如下(示例):
#include "toast.h"
#include <QPropertyAnimation>
#include <QScreen>
#include <QGuiApplication>
#include <QPainter>
#include <QTimer>
#include <QDebug>
#include <QGridLayout>
Toast::Toast(QWidget *parent)
: QWidget(parent)
{
label = new QLabel();
label->setStyleSheet("background-color: rgba(0,0,0,0.80);\nborder-radius: 26px;\ncolor: #FFFFFF;\nfont-family: microsoft yahei;\nfont-size: 16px;\npadding-left:25px;\npadding-right:25px;");
QGridLayout *layout = new QGridLayout;
layout->addWidget(label);
widget = new QWidget();
widget->setWindowFlags(windowFlags() | Qt::FramelessWindowHint | Qt::Tool);
widget->setAttribute(Qt::WA_TranslucentBackground, true);
widget->setGeometry(0,0,170,52);
widget->setLayout(layout);
QScreen* pScreen = QGuiApplication::primaryScreen();
widget->move((pScreen->size().width() - widget->width()) / 2, pScreen->size().height() /2);
widget->setVisible(true);
}
Toast::~Toast()
{
delete label;
delete widget;
}
void Toast::setText(const QString& text)
{
label->setText(text);
}
void Toast::showAnimation(int timeout)
{
QTimer::singleShot(timeout, [&]
{
QPropertyAnimation *animation = new QPropertyAnimation(this, "windowOpacity");
animation->setDuration(500);
animation->setStartValue(1);
animation->setEndValue(0);
animation->start();
connect(animation, &QPropertyAnimation::finished, [&]
{
close();
deleteLater();
});
});
}
void Toast::movetoPosition(int x,int y)
{
widget->move(x,y);
}
void Toast::showTip(const QString& text ,int x,int y,QWidget* parent /*= nullptr*/)
{
Toast* toast = new Toast(parent);
toast->setWindowFlags(toast->windowFlags() | Qt::WindowStaysOnTopHint);
toast->setText(text);
toast->adjustSize();
toast->movetoPosition(x, y);
toast->showAnimation();
}
3.main cpp
void MainWindow::on_pushButton_4_clicked()
{
Toast::showTip("测试成功!测试成功!测试成功!测试成功!测试成功!",this->x(),this->y());
}
void MainWindow::on_pushButton_5_clicked()
{
qDebug()<<"12";
// Toast::showTip(QApplication::translate("Dialog", "Please set destination IP !"));
Toast::showTip("测试成功!",this->x(),this->y());
qDebug()<<"123";
}void MainWindow::on_pushButton_4_clicked()
{
Toast::showTip("测试成功!测试成功!测试成功!测试成功!测试成功!",this->x(),this->y());
}
4、总结
文章参考引用的内容,然后自己实现一个toast,只需要包含头文件和cpp就可以在程序中使用了
5、引用
1、QT自定义属性动画
2、QT实现toast效果
边栏推荐
- Looking for innocence in New York -- a beautiful day at the discovery center of Legoland, New Jersey
- 徹底搞懂基於Open3D的點雲處理教程!
- 聊聊电商系统中红包活动设计
- After 22 years in office, the father of PowerShell will leave Microsoft: he was demoted by Microsoft for developing PowerShell
- Competence of product manager
- 性能测试如何创造业务价值
- Stretchdibits function
- What is cloud primordial? This time, I can finally understand!
- 页面标题组件
- R语言使用epiDisplay包的lsNoFunction函数列出当前空间中的所有对象、除了用户自定义的函数对象
猜你喜欢

LightGroupButton* sender = static_ cast<LightGroupButton*>(QObject::sender());

论文导读 | 机器学习在数据库基数估计中的应用

材质UV遮罩的技巧

MySQL advanced learning summary 7: MySQL data structure - Comparison of hash index, AVL tree, B tree and b+ tree

Distance measurement - Jaccard distance

【JVM调优实战100例】01——JVM的介绍与程序计数器

Stm32g0 USB DFU upgrade verification error -2

论文导读 | 关于将预训练语言模型作为知识库的分析与批评

How to play when you travel to Bangkok for the first time? Please keep this money saving strategy

Yesterday, Alibaba senior wrote a responsibility chain model, and there were countless bugs
随机推荐
reduce--遍历元素计算 具体的计算公式需要传入 结合BigDecimal
Leetcode(81)——搜索旋转排序数组 II
Ali was wildly asked by the interviewer on three sides. Redis dared not write 'proficient' on his resume anymore
新手必看,點擊兩個按鈕切換至不同的內容
徹底搞懂基於Open3D的點雲處理教程!
R语言dplyr包na_if函数把向量数值中的控制转化为缺失值NA、按照映射规则把指定内容转化为缺失值NA
R语言使用epiDisplay包的lsNoFunction函数列出当前空间中的所有对象、除了用户自定义的函数对象
论文导读 | 关于将预训练语言模型作为知识库的分析与批评
Excel查找一列中的相同值,删除该行或替换为空值
Obligatoire pour les débutants, cliquez sur deux boutons pour passer à un contenu différent
工业软件讲堂-三维CAD设计软件的核心技术解析----讲坛第二次讲座
消息队列消息丢失和消息重复发送的处理策略
迷你高尔夫球场:伦敦休闲旅游好去处
Excel如何进行隔行复制粘贴
R language dplyr package filter function filters dataframe data. If the name of the data column (variable) to be filtered contains quotation marks, you need to use!! SYM syntax processing, otherwise n
M2DGR:多源多场景 地面机器人SLAM数据集(ICRA 2022 )
Web version 3D visualization tool, 97 things programmers should know, AI frontier paper | information daily # 2022.07.01
R语言dplyr包rowwise函数、mutate函数计算dataframe数据中多个数据列在每行的最大值、并生成行最大值对应的数据列(row maximum)
Learn the knowledge points of eight part essay ~ ~ 1
Tips for material UV masking