当前位置:网站首页>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效果
边栏推荐
- R language dplyr package Na_ The if function converts the control in the vector value into the missing value Na, and converts the specified content into the missing value Na according to the mapping r
- [Yugong series] July 2022 go teaching course 001 introduction to go language premise
- SQL training 2
- Hospital online inquiry source code hospital video inquiry source code hospital applet source code
- Excel如何进行隔行复制粘贴
- ICDE 2023|TKDE Poster Session(CFP)
- 拦截器与过滤器的区别
- CDN acceleration and breaking J anti-theft chain function
- 材质UV遮罩的技巧
- 新手必看,點擊兩個按鈕切換至不同的內容
猜你喜欢
![[daily question] first day](/img/8c/f25cddb6ca86d44538c976fae13c6e.png)
[daily question] first day

Mini Golf Course: a good place for leisure and tourism in London

Troubleshooting: kubectl reports an error validationerror: unknown field \u00a0

仿京东放大镜效果(pink老师版)

Ali was wildly asked by the interviewer on three sides. Redis dared not write 'proficient' on his resume anymore

UML 类图

9D电影是怎样的?(+维度空间常识)
![27: Chapter 3: develop Passport Service: 10: [registration / login] interface: after the registration / login is OK, save the user session information (uid, utoken) to redis and cookies; (one main poi](/img/b9/2066a13b160252114c2881007094f8.png)
27: Chapter 3: develop Passport Service: 10: [registration / login] interface: after the registration / login is OK, save the user session information (uid, utoken) to redis and cookies; (one main poi

Excel如何进行隔行复制粘贴

yolov3 训练自己的数据集之生成train.txt
随机推荐
故障排查:kubectl报错ValidationError: unknown field \u00a0
options should NOT have additional properties
options should NOT have additional properties
How to write controller layer code gracefully?
Have you stepped on the nine common pits in the e-commerce system?
2022软件工程期末考试 回忆版
R language ggplot2 visual Facet: gganimate package is based on Transition_ Time function to create dynamic scatter animation (GIF)
Golang并发编程——goroutine、channel、sync
【愚公系列】2022年07月 Go教学课程 001-Go语言前提简介
Installation of thingsboard, an open source IOT platform
Leetcode (154) -- find the minimum value II in the rotation sort array
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
Redis (7) -- database and expiration key
2022编译原理期末考试 回忆版
Stretchdibits function
Meta universe chain game system development (logic development) - chain game system development (detailed analysis)
After 22 years in office, the father of PowerShell will leave Microsoft: he was demoted by Microsoft for developing PowerShell
Stratégie touristique d'été de Singapour: un jour pour visiter l'île de San taosha à Singapour
Introduction to sap s/4hana OData mock service
UML 类图