• 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
  • 相关阅读:
    Linq
    正则表达式
    XPath
    winFrom http协议
    CSS选择器
    Action方法
    Code First开发方式
    Database First开发方式
    可选参数,程序暂停,属性的初始化,String.Format改进
    Lambda表达式和LTNQ
  • 原文地址:https://www.cnblogs.com/FKdelphi/p/16293436.html
Copyright © 2020-2023  润新知