ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Qt-QPropertyAnimation的使用(支持放大、移动、透明动画)

2022-05-20 19:05:07  阅读:176  来源: 互联网

标签:动画 Qt QPropertyAnimation animation QPushButton 100 pLabel MainWindow


 相关资料:

https://download.csdn.net/download/zhujianqiangqq/85424062      csdn代码包下载

.pro

 1 QT       += core gui
 2 
 3 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
 4 
 5 CONFIG += c++11
 6 
 7 # The following define makes your compiler emit warnings if you use
 8 # any Qt feature that has been marked deprecated (the exact warnings
 9 # depend on your compiler). Please consult the documentation of the
10 # deprecated API in order to know how to port your code away from it.
11 DEFINES += QT_DEPRECATED_WARNINGS
12 
13 # You can also make your code fail to compile if it uses deprecated APIs.
14 # In order to do so, uncomment the following line.
15 # You can also select to disable deprecated APIs only up to a certain version of Qt.
16 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
17 
18 SOURCES += \
19     main.cpp \
20     mainwindow.cpp
21 
22 HEADERS += \
23     mainwindow.h
24 
25 FORMS += \
26     mainwindow.ui
27 
28 # Default rules for deployment.
29 qnx: target.path = /tmp/$${TARGET}/bin
30 else: unix:!android: target.path = /opt/$${TARGET}/bin
31 !isEmpty(target.path): INSTALLS += target
32 
33 RESOURCES += \
34     resource.qrc
View Code

main.cpp

 1 #include "mainwindow.h"
 2 
 3 #include <QApplication>
 4 
 5 int main(int argc, char *argv[])
 6 {
 7     QApplication a(argc, argv);
 8     MainWindow w;
 9     w.show();
10     return a.exec();
11 }
View Code

mainwindow.h

 1 #ifndef MAINWINDOW_H
 2 #define MAINWINDOW_H
 3 
 4 #include <QMainWindow>
 5 #include <QPropertyAnimation>
 6 #include <QTimer>
 7 #include <QLabel>
 8 #include <QPushButton>
 9 
10 QT_BEGIN_NAMESPACE
11 namespace Ui { class MainWindow; }
12 QT_END_NAMESPACE
13 
14 class MainWindow : public QMainWindow
15 {
16     Q_OBJECT
17 
18 public:
19     MainWindow(QWidget *parent = nullptr);
20     ~MainWindow();
21 
22 private slots:
23     void on_Geometry();
24     void on_Pos();
25     void on_WindowOpacity();
26     void on_Timer();
27     void on_ButtonTimer();
28 private:
29     Ui::MainWindow *ui;
30     QPropertyAnimation *m_animation;// 动画对象指针
31     QTimer *m_pTimer;
32     QLabel *m_pLabel;
33     QPushButton *m_pGeometry;
34     QPushButton *m_pPos;
35     QPushButton *m_pWindowOpacity;
36     QPushButton *m_pButtonTimer;
37 };
38 #endif // MAINWINDOW_H
View Code

mainwindow.cpp

  1 #include "mainwindow.h"
  2 #include "ui_mainwindow.h"
  3 
  4 MainWindow::MainWindow(QWidget *parent)
  5     : QMainWindow(parent)
  6     , ui(new Ui::MainWindow)
  7 {
  8     ui->setupUi(this);
  9     setWindowTitle(QStringLiteral("Qt之QPropertyAnimation的使用(支持放大、移动、透明动画)"));
 10 
 11     m_pLabel = new QLabel(this);
 12     m_pLabel->setPixmap(QPixmap(":/new/prefix1/roommain.png"));
 13     m_pLabel->setGeometry(100, 100, 100, 100);
 14     m_pLabel->setScaledContents(true);
 15 
 16     m_animation = new QPropertyAnimation();
 17     m_animation->setEasingCurve(QEasingCurve::Linear); //设置动画效果
 18 
 19     m_pTimer = new QTimer(this);
 20     m_pTimer->setSingleShot(false);
 21     connect(m_pTimer, &QTimer::timeout, this, &MainWindow::on_Timer);
 22 
 23     m_pGeometry = new QPushButton(this);
 24     m_pGeometry->setText(QStringLiteral("改大小"));
 25     m_pGeometry->setGeometry(400, 10, 100, 25);
 26     connect(m_pGeometry, &QPushButton::clicked, this, &MainWindow::on_Geometry);
 27 
 28     m_pPos = new QPushButton(this);
 29     m_pPos->setText(QStringLiteral("移动"));
 30     m_pPos->setGeometry(400, 40, 100, 25);
 31     connect(m_pPos, &QPushButton::clicked, this, &MainWindow::on_Pos);
 32 
 33     m_pWindowOpacity = new QPushButton(this);
 34     m_pWindowOpacity->setText(QStringLiteral("透明"));
 35     m_pWindowOpacity->setGeometry(400, 70, 100, 25);
 36     connect(m_pWindowOpacity, &QPushButton::clicked, this, &MainWindow::on_WindowOpacity);
 37 
 38     m_pButtonTimer = new QPushButton(this);
 39     m_pButtonTimer->setText(QStringLiteral("显示坐标"));
 40     m_pButtonTimer->setGeometry(400, 100, 100, 25);
 41     connect(m_pButtonTimer, &QPushButton::clicked, this, &MainWindow::on_ButtonTimer);
 42 }
 43 
 44 MainWindow::~MainWindow()
 45 {
 46     delete ui;
 47 }
 48 
 49 void MainWindow::on_Geometry()
 50 {
 51     // geometry:按矩形的动画(移动和缩放)
 52     m_animation->setTargetObject(m_pLabel);    // 设置使用动画的控件
 53     m_animation->setPropertyName("geometry");   // 指定动画属性名
 54     m_animation->setDuration(100);    // 设置动画时间(单位:毫秒)
 55     // 获取控件初始的大小
 56     int width = m_pLabel->rect().width();
 57     int height = m_pLabel->rect().height();
 58     QPoint oPoint = m_pLabel->pos();
 59     // 设置动画起始位置
 60     m_animation->setStartValue(QRect(oPoint, QSize( width, height)));
 61     // 设置动画步长值,以及在该位置时的长宽
 62     m_animation->setKeyValueAt(0.5, QRect(m_pLabel->pos() - QPoint(50, 50), QSize( width + 100, height + 100)));
 63     // 设置动画结束位置及其大小
 64     m_animation->setEndValue(QRect(oPoint, QSize( width, height)));
 65     // 启动动画
 66     m_animation->start();
 67 }
 68 
 69 void MainWindow::on_Pos()
 70 {
 71     // pos:按点移动的动画(移动)
 72     m_animation->setTargetObject(m_pLabel);    // 设置使用动画的控件
 73     m_animation->setPropertyName("pos");    // 指定动画属性名
 74     m_animation->setDuration(3000);    // 设置动画时间(单位:毫秒)
 75     // 设置动画起始位置在label控件当前的pos
 76     m_animation->setStartValue(m_pLabel->pos());
 77     // 设置动画结束位置
 78     m_animation->setEndValue(m_pLabel->pos() + QPoint(200, 100));
 79     // 启动动画
 80     m_animation->start();
 81 }
 82 
 83 void MainWindow::on_WindowOpacity()
 84 {
 85     // windowOpacity:不透明度(注意该效果只对顶级窗口有效哦)
 86     m_animation->setTargetObject(this);     // 重设动画使用对象
 87     m_animation->setPropertyName("windowOpacity");  // 指定动画属性名
 88     m_animation->setDuration(2000);     // 设置动画时间(单位:毫秒)
 89 
 90     // 设置动画步长值,以及在该位置时显示的透明度
 91     m_animation->setKeyValueAt(0, 1);
 92     m_animation->setKeyValueAt(0.5, 0);
 93     m_animation->setKeyValueAt(1, 0);
 94     // 当值为-1时,动画一直运行,直到窗口关闭
 95     m_animation->setLoopCount(-1);
 96     // 启动动画
 97     m_animation->start();
 98 }
 99 
100 void MainWindow::on_Timer()
101 {
102     QString s = "x:%1  y:%2";
103     setWindowTitle(s.arg(m_pLabel->pos().x()).arg(m_pLabel->pos().y()));
104 }
105 
106 void MainWindow::on_ButtonTimer()
107 {
108     m_pTimer->start(100);
109 }
View Code

mainwindow.ui

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <ui version="4.0">
 3  <class>MainWindow</class>
 4  <widget class="QMainWindow" name="MainWindow">
 5   <property name="geometry">
 6    <rect>
 7     <x>0</x>
 8     <y>0</y>
 9     <width>550</width>
10     <height>400</height>
11    </rect>
12   </property>
13   <property name="windowTitle">
14    <string>MainWindow</string>
15   </property>
16   <widget class="QWidget" name="centralwidget"/>
17  </widget>
18  <resources/>
19  <connections/>
20 </ui>
View Code

 

 

搜索

复制

<iframe height="240" width="320"></iframe>

标签:动画,Qt,QPropertyAnimation,animation,QPushButton,100,pLabel,MainWindow
来源: https://www.cnblogs.com/FKdelphi/p/16293436.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有