zoukankan      html  css  js  c++  java
  • Qt之QParallelAnimationGroup

    简述

    QParallelAnimationGroup类提供动画的并行组。

    QParallelAnimationGroup - 一个动画容器,当它启动的时候它里面的所有动画也启动,即:并行运行所有动画,当持续时间最长的动画完成时动画组也随之完成。

    详细描述

    QParallelAnimationGroup可以被当做任何其它的QAbstractAnimation动画,例如:暂停、重置、添加到其它动画组中。

    QParallelAnimationGroup *group = new QParallelAnimationGroup;
    group->addAnimation(anim1);
    group->addAnimation(anim2);
    
    group->start();

    这个例子中,anim1、anim2是QPropertyAnimation。

    示例

    下面,我们通过QParallelAnimationGroup 来构建一个并行动画组,并添加属性动画QPropertyAnimation,这里也可以使用addAnimation()添加其它动画/动画组,就不予演示了。

    效果

    这里写图片描述

    源码

    MainWindow::MainWindow(QWidget *parent)
        : CustomWindow(parent)
    {
        ...
    
        QPushButton *pStartButton = new QPushButton(this);
        pStartButton->setText(QString::fromLocal8Bit("开始动画"));
    
        QList<QLabel *> list;
        QStringList strList;
        strList << QString::fromLocal8Bit("一去丶二三里") << QString::fromLocal8Bit("青春不老,奋斗不止");
    
        for (int i = 0; i < strList.count(); ++i)
        {
            QLabel *pLabel = new QLabel(this);
            pLabel->setText(strList.at(i));
            pLabel->setAlignment(Qt::AlignCenter);
            pLabel->setStyleSheet("color: rgb(0, 160, 230);");
            list.append(pLabel);
        }
    
        // 动画一
        QPropertyAnimation *pAnimation1 = new QPropertyAnimation(list.at(0), "geometry");
        pAnimation1->setDuration(1000);
        pAnimation1->setStartValue(QRect(0, 0, 100, 30));
        pAnimation1->setEndValue(QRect(120, 130, 100, 30));
        pAnimation1->setEasingCurve(QEasingCurve::OutBounce);
    
        // 动画二
        QPropertyAnimation *pAnimation2 = new QPropertyAnimation(list.at(1), "geometry");
        pAnimation2->setDuration(1000);
        pAnimation2->setStartValue(QRect(120, 130, 120, 30));
        pAnimation2->setEndValue(QRect(170, 0, 120, 30));
        pAnimation2->setEasingCurve(QEasingCurve::OutInCirc);
    
        m_pGroup = new QParallelAnimationGroup(this);
    
        // 添加动画
        m_pGroup->addAnimation(pAnimation1);
        m_pGroup->addAnimation(pAnimation2);
    
        // 循环2次
        m_pGroup->setLoopCount(2);
    
        connect(pStartButton, SIGNAL(clicked(bool)), this, SLOT(startAnimation()));
    
        ...
    }
    
    // 开始动画
    void MainWindow::startAnimation()
    {
        m_pGroup->start();
    }

    更多参考

  • 相关阅读:
    51nod 1179 最大的最大公约数 (数论)
    POJ 3685 二分套二分
    POJ 3045 贪心
    LIC
    HDU 1029 Ignatius and the Princess IV
    HDU 1024 Max Sum Plus Plus
    HDU 2389 Rain on your Parade
    HDU 2819 Swap
    HDU 1281 棋盘游戏
    HDU 1083 Courses
  • 原文地址:https://www.cnblogs.com/new0801/p/6146581.html
Copyright © 2011-2022 走看看