• QtQPropertyAnimation的使用(支持放大、移动、透明动画)


     相关资料:

    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
  • 相关阅读:
    Shiro入门学习之shi.ini实现授权(三)
    Shiro入门学习之shi.ini实现认证及源码分析(二)
    猜字母游戏(Java)
    二维数组的语法
    鸡兔同笼问题(Java)
    成绩统计程序(Java)
    18位身份证验证(Java)加入身份证输入验证是否满足18位代码(修订稿)
    18位身份证验证(Java)
    键盘输入字符插入定义数组中并按顺序排列
    一个随机验证码且不重复的小程序以及求随机输入一组数组中的最大值(Java)
  • 原文地址:https://www.cnblogs.com/FKdelphi/p/16293436.html
Copyright © 2020-2023  润新知