⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demoitemanimation.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
字号:
/******************************************************************************** Copyright (C) 2005-2007 Trolltech ASA. All rights reserved.**** This file is part of the demonstration applications of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://trolltech.com/products/qt/licenses/licensing/opensource/**** If you are unsure which license is appropriate for your use, please** review the following information:** http://trolltech.com/products/qt/licenses/licensing/licensingoverview** or contact the sales department at sales@trolltech.com.**** In addition, as a special exception, Trolltech gives you certain** additional rights. These rights are described in the Trolltech GPL** Exception version 1.0, which can be found at** http://www.trolltech.com/products/qt/gplexception/ and in the file** GPL_EXCEPTION.txt in this package.**** In addition, as a special exception, Trolltech, as the sole copyright** holder for Qt Designer, grants users of the Qt/Eclipse Integration** plug-in the right for the Qt/Eclipse Integration to link to** functionality provided by Qt Designer and its related libraries.**** Trolltech reserves all rights not expressly granted herein.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "demoitemanimation.h"#include "demoitem.h"#include "colors.h"DemoItemAnimation::DemoItemAnimation(DemoItem *item, INOROUT inOrOut){    this->opacityAt0 = 1.0;    this->opacityAt1 = 1.0;    this->startDelay = 0;    this->inOrOut = inOrOut;    this->hideOnFinished = false;    this->forcePlay = false;    this->timeline = new QTimeLine(5000);    this->timeline->setFrameRange(0, 2000);    this->timeline->setUpdateInterval(int(1000.0/Colors::fps));    this->moveOnPlay = false;    setTimeLine(this->timeline);    setItem(item);}DemoItemAnimation::~DemoItemAnimation(){    // Do not delete demoitem. It is not    // owned by an animation    delete this->timeline;}void DemoItemAnimation::prepare(){    this->demoItem()->prepare();}void DemoItemAnimation::setStartPos(const QPointF &pos){    this->startPos = pos;}void DemoItemAnimation::setDuration(int duration){    duration = int(duration * Colors::animSpeed);    this->timeline->setDuration(duration);    this->moveOnPlay = true;}void DemoItemAnimation::setCurrentTime(int ms){    this->timeline->setCurrentTime(ms);}bool DemoItemAnimation::notOwnerOfItem(){    return this != demoItem()->currentAnimation;}void DemoItemAnimation::play(bool fromStart, bool force){    this->fromStart = fromStart;    this->forcePlay = force;        if (this->startDelay){        QTimer::singleShot(this->startDelay, this, SLOT(playWithoutDelay()));        return;    }    else        this->playWithoutDelay();}void DemoItemAnimation::playWithoutDelay(){    QPointF currPos = this->demoItem()->pos();        // If the item that this animation controls in currently under the    // control of another animation, stop that animation first    if (this->demoItem()->currentAnimation)        this->demoItem()->currentAnimation->timeline->stop();       this->demoItem()->currentAnimation = this;    this->timeline->stop();    if (Colors::noAnimations && !this->forcePlay){        this->timeline->setCurrentTime(1);    }    else{        if (this->fromStart)            this->timeline->setCurrentTime(0);        if (this->demoItem()->isVisible())            // If the item is already visible, start the animation from            // the items current position rather than from start.              this->setPosAt(0.0, currPos);        else            this->setPosAt(0.0, this->startPos);    }    this->demoItem()->setPos(this->posAt(this->timeline->currentTime()));    this->demoItem()->setRecursiveVisible(true);    if (this->moveOnPlay && !(Colors::noAnimations && !this->forcePlay))        this->timeline->start();    this->demoItem()->animationStarted(this->inOrOut);       }void DemoItemAnimation::stop(bool reset){    this->timeline->stop();    if (reset)        this->demoItem()->setPos(this->posAt(0));    if (this->hideOnFinished && !this->moveOnPlay)        this->demoItem()->setRecursiveVisible(false);    this->demoItem()->animationStopped(this->inOrOut);}void DemoItemAnimation::setRepeat(int nr){    this->timeline->setLoopCount(nr);}void DemoItemAnimation::playReverse(){}bool DemoItemAnimation::running(){    return (this->timeLine()->state() == QTimeLine::Running);}bool DemoItemAnimation::runningOrItemLocked(){    return (this->running() || this->demoItem()->locked);}void DemoItemAnimation::lockItem(bool state){    this->demoItem()->locked = state;}DemoItem *DemoItemAnimation::demoItem(){    return (DemoItem *) this->item();}void DemoItemAnimation::setOpacityAt0(qreal opacity){    this->opacityAt0 = opacity;}void DemoItemAnimation::setOpacityAt1(qreal opacity){    this->opacityAt1 = opacity;}void DemoItemAnimation::setOpacity(qreal step){    DemoItem *demoItem = (DemoItem *) item();    demoItem->opacity = this->opacityAt0 + step * step * step * (this->opacityAt1 - this->opacityAt0);}void DemoItemAnimation::afterAnimationStep(qreal step){    if (step == 1.0f){        if (this->timeline->loopCount() > 0){            // animation finished.            if (this->hideOnFinished)                this->demoItem()->setRecursiveVisible(false);            this->demoItem()->animationStopped(this->inOrOut);        }    } else if (Colors::noAnimations && !this->forcePlay){        // The animation is not at end, but        // the animations should not play, so go to end.        this->setStep(1.0f); // will make this method being called recursive.    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -