本文整理汇总了C++中QSignalTransition::addAnimation方法的典型用法代码示例。如果您正苦于以下问题:C++ QSignalTransition::addAnimation方法的具体用法?C++ QSignalTransition::addAnimation怎么用?C++ QSignalTransition::addAnimation使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QSignalTransition
的用法示例。
在下文中一共展示了QSignalTransition::addAnimation方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: QPropertyAnimation
QGraphicsItem *CarouselGraphicsWidget::addItem(QGraphicsWidget *p)
{
scene()->addItem(p);
icons.append(p);
// Set the speed of the animation (it has to be set on the objects in the scene)
QPropertyAnimation *anim = new QPropertyAnimation(p, "geometry");
anim->setDuration(500);
animationGroup->addAnimation(anim);
QState *newState = new QState(machine);
QState *lastState = states.at(states.size()-1);
if (states.size() == 0) {
machine->setInitialState(newState);
} else {
// Link this new state to the next state
QSignalTransition *transition;
transition = lastState->addTransition(this, SIGNAL(m_next()), newState);
transition->addAnimation(animationGroup);
// Link the next state to this new state
transition = newState->addTransition(this, SIGNAL(m_back()), lastState);
transition->addAnimation(animationGroup);
}
states.append(newState);
// NB: Don't update the scene yet. See resizeEvent comment
return p;
}
示例2: initShowHideAnimation
void DockPanel::initShowHideAnimation()
{
QStateMachine * machine = new QStateMachine(this);
QState * showState = new QState(machine);
showState->assignProperty(this,"y", 0);
QState * hideState = new QState(machine);
//y should change with DockMode changed
connect(this, &DockPanel::startHide, [=]{
hideState->assignProperty(this,"y", m_dockModeData->getDockHeight());
});
machine->setInitialState(showState);
QPropertyAnimation *showAnimation = new QPropertyAnimation(this, "y");
showAnimation->setDuration(SHOW_ANIMATION_DURATION);
showAnimation->setEasingCurve(SHOW_EASINGCURVE);
connect(showAnimation,&QPropertyAnimation::finished,this,&DockPanel::onShowPanelFinished);
QPropertyAnimation *hideAnimation = new QPropertyAnimation(this, "y");
hideAnimation->setDuration(HIDE_ANIMATION_DURATION);
hideAnimation->setEasingCurve(HIDE_EASINGCURVE);
connect(hideAnimation,&QPropertyAnimation::finished,this,&DockPanel::onHidePanelFinished);
QSignalTransition *st = showState->addTransition(this,SIGNAL(startHide()), hideState);
st->addAnimation(hideAnimation);
QSignalTransition *ht = hideState->addTransition(this,SIGNAL(startShow()),showState);
ht->addAnimation(showAnimation);
machine->start();
}
示例3: prepare
void UIAnimation::prepare()
{
/* Prepare animation-machine: */
m_pAnimationMachine = new QStateMachine(this);
/* Create 'start' state: */
m_pStateStart = new QState(m_pAnimationMachine);
connect(m_pStateStart, SIGNAL(propertiesAssigned()), this, SIGNAL(sigStateEnteredStart()));
/* Create 'final' state: */
m_pStateFinal = new QState(m_pAnimationMachine);
connect(m_pStateFinal, SIGNAL(propertiesAssigned()), this, SIGNAL(sigStateEnteredFinal()));
/* Prepare 'forward' animation: */
m_pForwardAnimation = new QPropertyAnimation(parent(), m_pszPropertyName, m_pAnimationMachine);
m_pForwardAnimation->setEasingCurve(QEasingCurve(QEasingCurve::InOutCubic));
m_pForwardAnimation->setDuration(m_iAnimationDuration);
/* Prepare 'reverse' animation: */
m_pReverseAnimation = new QPropertyAnimation(parent(), m_pszPropertyName, m_pAnimationMachine);
m_pReverseAnimation->setEasingCurve(QEasingCurve(QEasingCurve::InOutCubic));
m_pReverseAnimation->setDuration(m_iAnimationDuration);
/* Prepare state-transitions: */
QSignalTransition *pStartToFinal = m_pStateStart->addTransition(parent(), m_pszSignalForward, m_pStateFinal);
pStartToFinal->addAnimation(m_pForwardAnimation);
QSignalTransition *pFinalToStart = m_pStateFinal->addTransition(parent(), m_pszSignalReverse, m_pStateStart);
pFinalToStart->addAnimation(m_pReverseAnimation);
/* Fetch animation-borders: */
update();
/* Choose initial state: */
m_pAnimationMachine->setInitialState(!m_fReverse ? m_pStateStart : m_pStateFinal);
/* Start animation-machine: */
m_pAnimationMachine->start();
}
示例4: setOwnedByLayout
UIGChooserItem::UIGChooserItem(UIGChooserItem *pParent, bool fTemporary)
: m_fRoot(!pParent)
, m_fTemporary(fTemporary)
, m_pParent(pParent)
, m_iPreviousMinimumWidthHint(0)
, m_iPreviousMinimumHeightHint(0)
, m_dragTokenPlace(DragToken_Off)
, m_fHovered(false)
, m_pHighlightMachine(0)
, m_pForwardAnimation(0)
, m_pBackwardAnimation(0)
, m_iAnimationDuration(400)
, m_iDefaultDarkness(100)
, m_iHighlightDarkness(90)
, m_iAnimationDarkness(m_iDefaultDarkness)
, m_iDragTokenDarkness(110)
{
/* Basic item setup: */
setOwnedByLayout(false);
setAcceptDrops(true);
setFocusPolicy(Qt::NoFocus);
setFlag(QGraphicsItem::ItemIsSelectable, false);
setAcceptHoverEvents(!isRoot());
/* Non-root item? */
if (!isRoot())
{
/* Create state machine: */
m_pHighlightMachine = new QStateMachine(this);
/* Create 'default' state: */
QState *pStateDefault = new QState(m_pHighlightMachine);
/* Create 'highlighted' state: */
QState *pStateHighlighted = new QState(m_pHighlightMachine);
/* Forward animation: */
m_pForwardAnimation = new QPropertyAnimation(this, "animationDarkness", this);
m_pForwardAnimation->setDuration(m_iAnimationDuration);
m_pForwardAnimation->setStartValue(m_iDefaultDarkness);
m_pForwardAnimation->setEndValue(m_iHighlightDarkness);
/* Backward animation: */
m_pBackwardAnimation = new QPropertyAnimation(this, "animationDarkness", this);
m_pBackwardAnimation->setDuration(m_iAnimationDuration);
m_pBackwardAnimation->setStartValue(m_iHighlightDarkness);
m_pBackwardAnimation->setEndValue(m_iDefaultDarkness);
/* Add state transitions: */
QSignalTransition *pDefaultToHighlighted = pStateDefault->addTransition(this, SIGNAL(sigHoverEnter()), pStateHighlighted);
pDefaultToHighlighted->addAnimation(m_pForwardAnimation);
QSignalTransition *pHighlightedToDefault = pStateHighlighted->addTransition(this, SIGNAL(sigHoverLeave()), pStateDefault);
pHighlightedToDefault->addAnimation(m_pBackwardAnimation);
/* Initial state is 'default': */
m_pHighlightMachine->setInitialState(pStateDefault);
/* Start state-machine: */
m_pHighlightMachine->start();
}
}
示例5: setupItemAnimations
void DiscountPage::setupItemAnimations()
{
QState *smallState = new QState();
QState *bigState = new QState();
for (int i = 0; i < this->m_itemList.size(); i++) {
smallState->assignProperty(this->m_itemList[i],"scale", 0);
bigState->assignProperty(this->m_itemList[i],"scale",1);
}
QSequentialAnimationGroup *showItemGroup = new QSequentialAnimationGroup(this);
for (int i = 0; i < this->m_itemList.size(); i++) {
QPropertyAnimation *anim = new QPropertyAnimation(this->m_itemList[i], "scale", this);
anim->setDuration(300);
anim->setEasingCurve(QEasingCurve::OutBack);
showItemGroup->addAnimation(anim);
}
QSignalTransition *trans = smallState->addTransition(this, SIGNAL(start()), bigState);
trans->addAnimation(showItemGroup);
connect(showItemGroup,SIGNAL(finished()),this,SLOT(startSelect()));
trans = bigState->addTransition(this,SIGNAL(quitPage()),smallState);
connect(smallState,SIGNAL(entered()),this,SLOT(closeSelect()));
QStateMachine *states = new QStateMachine(this);
states->addState(smallState);
states->addState(bigState);
states->setInitialState(smallState);
states->start();
}
示例6: UIGraphicsButton
UIGraphicsZoomButton::UIGraphicsZoomButton(QIGraphicsWidget *pParent, const QIcon &icon, int iDirection)
: UIGraphicsButton(pParent, icon)
, m_iIndent(4)
, m_iDirection(iDirection)
, m_iAnimationDuration(200)
, m_pStateMachine(0)
, m_pForwardAnimation(0)
, m_pBackwardAnimation(0)
, m_fStateDefault(true)
{
/* Setup: */
setAcceptHoverEvents(true);
/* Create state machine: */
m_pStateMachine = new QStateMachine(this);
/* Create 'default' state: */
QState *pStateDefault = new QState(m_pStateMachine);
pStateDefault->assignProperty(this, "stateDefault", true);
/* Create 'zoomed' state: */
QState *pStateZoomed = new QState(m_pStateMachine);
pStateZoomed->assignProperty(this, "stateDefault", false);
/* Initial state is 'default': */
m_pStateMachine->setInitialState(pStateDefault);
/* Zoom animation: */
m_pForwardAnimation = new QPropertyAnimation(this, "geometry", this);
m_pForwardAnimation->setDuration(m_iAnimationDuration);
/* Unzoom animation: */
m_pBackwardAnimation = new QPropertyAnimation(this, "geometry", this);
m_pBackwardAnimation->setDuration(m_iAnimationDuration);
/* Add state transitions: */
QSignalTransition *pDefaultToZoomed = pStateDefault->addTransition(this, SIGNAL(sigHoverEnter()), pStateZoomed);
pDefaultToZoomed->addAnimation(m_pForwardAnimation);
QSignalTransition *pZoomedToDefault = pStateZoomed->addTransition(this, SIGNAL(sigHoverLeave()), pStateDefault);
pZoomedToDefault->addAnimation(m_pBackwardAnimation);
/* Start state-machine: */
m_pStateMachine->start();
}
示例7: prepareElement
void UIGDetailsElement::prepareElement()
{
/* Initialization: */
m_nameFont = font();
m_nameFont.setWeight(QFont::Bold);
m_textFont = font();
/* Create highlight machine: */
m_pHighlightMachine = new QStateMachine(this);
/* Create 'default' state: */
QState *pStateDefault = new QState(m_pHighlightMachine);
/* Create 'highlighted' state: */
QState *pStateHighlighted = new QState(m_pHighlightMachine);
/* Forward animation: */
m_pForwardAnimation = new QPropertyAnimation(this, "animationDarkness", this);
m_pForwardAnimation->setDuration(m_iAnimationDuration);
m_pForwardAnimation->setStartValue(m_iDefaultDarkness);
m_pForwardAnimation->setEndValue(m_iHighlightDarkness);
/* Backward animation: */
m_pBackwardAnimation = new QPropertyAnimation(this, "animationDarkness", this);
m_pBackwardAnimation->setDuration(m_iAnimationDuration);
m_pBackwardAnimation->setStartValue(m_iHighlightDarkness);
m_pBackwardAnimation->setEndValue(m_iDefaultDarkness);
/* Add state transitions: */
QSignalTransition *pDefaultToHighlighted = pStateDefault->addTransition(this, SIGNAL(sigHoverEnter()), pStateHighlighted);
pDefaultToHighlighted->addAnimation(m_pForwardAnimation);
QSignalTransition *pHighlightedToDefault = pStateHighlighted->addTransition(this, SIGNAL(sigHoverLeave()), pStateDefault);
pHighlightedToDefault->addAnimation(m_pBackwardAnimation);
/* Initial state is 'default': */
m_pHighlightMachine->setInitialState(pStateDefault);
/* Start state-machine: */
m_pHighlightMachine->start();
connect(this, SIGNAL(sigToggleElement(DetailsElementType, bool)), model(), SLOT(sltToggleElements(DetailsElementType, bool)));
connect(this, SIGNAL(sigLinkClicked(const QString&, const QString&, const QString&)),
model(), SIGNAL(sigLinkClicked(const QString&, const QString&, const QString&)));
}
示例8: QGraphicsRectItem
Rect::Rect(QGraphicsItem *parent) : m_x(0), m_y(0), QGraphicsRectItem(parent) {
this->setRect(m_x, m_y, 100, 100);
this->setAcceptDrops(true);
QObject::connect(this, SIGNAL(rectChange()), this, SLOT(slRectChange()));
this->m_rectUpAn = new QPropertyAnimation(this, "rect"); // the animation will change rect and emit rectChange signal
this->m_rectDownAn = new QPropertyAnimation(this, "rect");
this->m_rectUpAn->setDuration(150);
this->m_rectUpAn->setStartValue(this->rect()); // animation start point
this->m_rectUpAn->setKeyValueAt(0.7, QRectF(-6, -6, 120, 120)); // animation end point
this->m_rectUpAn->setEndValue(QRectF(-3, -3, 110, 110));
this->m_rectDownAn->setDuration(150);;
this->m_rectDownAn->setStartValue(this->rect());
this->m_rectDownAn->setEndValue(QRectF(0, 0, 100, 100));
this->m_mainStatus = new QStateMachine(this);
QState *rectDragStart = new QState(this->m_mainStatus);
QState *rectDragEnd = new QState(this->m_mainStatus);
QSignalTransition *transition = rectDragStart->addTransition(this, SIGNAL(rectDragStart()), rectDragEnd);
transition->addAnimation(this->m_rectUpAn);
transition = rectDragEnd->addTransition(this, SIGNAL(rectDragEnd()), rectDragStart);
transition->addAnimation(this->m_rectDownAn);
this->m_mainStatus->addState(rectDragStart);
this->m_mainStatus->addState(rectDragEnd);
this->m_mainStatus->setInitialState(rectDragStart);
this->m_mainStatus->start();
this->setFlag(QGraphicsItem::ItemIsMovable, true);
this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
this->setFlag(QGraphicsItem::ItemIsFocusable, true);
this->setFlag(QGraphicsItem::ItemAcceptsInputMethod, true);
}
示例9: QGraphicsView
/*
* 功能:
* 构造函数,初始化有限状态机并run之。
* 参数:
* 无
* 返回值:
* 无
*/
SlidingScreen::SlidingScreen(QGraphicsView *parent, bool isOneDirection):
QGraphicsView(parent), m_isOneDirection(isOneDirection)
{
m_enable = false;
m_enableSliding = true;
m_pressPos.setX(0);
m_pressPos.setY(0);
m_releasePos.setX(0);
m_releasePos.setY(0);
p_frame1 = new QFrame();
p_frame2 = new QFrame();
p_frame3 = new QFrame();
p_layout1 = new QStackedLayout();
p_layout2 = new QStackedLayout();
p_layout3 = new QStackedLayout();
m_layOut[0] = p_layout1;
m_layOut[1] = p_layout2;
m_layOut[2] = p_layout3;
/****初始化窗体指针缓存,索引缓存,索引缓存长度*********/
p_widgetBuf = new QVector<QWidget*>(BUF_LEN, nullptr);
p_indexBuf = new QVector<int>();
p_frame1->resize(DESKTOP_WIDTH,DESKTOP_HEIGHT);
p_frame2->resize(DESKTOP_WIDTH,DESKTOP_HEIGHT);
p_frame3->resize(DESKTOP_WIDTH,DESKTOP_HEIGHT);
p_frame1->setLayout(p_layout1);
p_frame2->setLayout(p_layout2);
p_frame3->setLayout(p_layout3);
/**************动画类实例化**********************/
p_group = new QParallelAnimationGroup;
p_frame1Animation = new QPropertyAnimation(p_frame1, "pos");
p_frame2Animation = new QPropertyAnimation(p_frame2, "pos");
p_frame3Animation = new QPropertyAnimation(p_frame3, "pos");
p_frame1Animation->setDuration(1200);
p_frame2Animation->setDuration(1200);
p_frame3Animation->setDuration(1200);
p_frame1Animation->setEasingCurve(QEasingCurve::InOutQuad);
p_frame2Animation->setEasingCurve(QEasingCurve::InOutQuad);
p_frame3Animation->setEasingCurve(QEasingCurve::InOutQuad);
p_group->addAnimation(p_frame1Animation);
p_group->addAnimation(p_frame2Animation);
p_group->addAnimation(p_frame3Animation);
connect(p_group, SIGNAL(finished()), this, SLOT(slotAnimationFinish()));
/***********************状态机实例化*******************************/
p_stateMachine = new QStateMachine(this);
p_startState = new QState();
p_leftState1 = new QState(p_startState);
p_leftState2 = new QState(p_startState);
p_leftState3 = new QState(p_startState);
p_rightState1 = new QState(p_startState);
p_rightState2 = new QState(p_startState);
p_rightState3 = new QState(p_startState);
p_upState1 = new QState(p_startState);
p_upState2 = new QState(p_startState);
p_upState3 = new QState(p_startState);
p_downState1 = new QState(p_startState);
p_downState2 = new QState(p_startState);
p_downState3 = new QState(p_startState);
/*********************move to left state*************************************/
p_leftState1->assignProperty(p_frame1, "visible", true);
p_leftState1->assignProperty(p_frame2, "visible", true);
p_leftState1->assignProperty(p_frame3, "visible", false);
p_leftState1->assignProperty(p_frame1, "pos", QPointF(0, DESKTOP_HEIGHT));
p_leftState1->assignProperty(p_frame2, "pos", QPointF(DESKTOP_WIDTH, DESKTOP_HEIGHT));
p_leftState1->assignProperty(p_frame3, "pos", QPointF(2*DESKTOP_WIDTH, DESKTOP_HEIGHT));
p_leftState1->assignProperty(p_frame1, "objectName", QString("1")); //存放当前显示的frame索引号
p_leftState2->assignProperty(p_frame2, "visible", true);
p_leftState2->assignProperty(p_frame3, "visible", true);
p_leftState2->assignProperty(p_frame1, "visible", false);
p_leftState2->assignProperty(p_frame2, "pos", QPointF(0, DESKTOP_HEIGHT));
p_leftState2->assignProperty(p_frame3, "pos", QPointF(DESKTOP_WIDTH, DESKTOP_HEIGHT));
p_leftState2->assignProperty(p_frame1, "pos", QPointF(DESKTOP_WIDTH*2, DESKTOP_HEIGHT));
p_leftState2->assignProperty(p_frame1, "objectName", QString("2"));
p_leftState3->assignProperty(p_frame3, "visible", true);
p_leftState3->assignProperty(p_frame1, "visible", true);
p_leftState3->assignProperty(p_frame2, "visible", false);
//.........这里部分代码省略.........
示例10: resizeEvent
// NB: resizeEvent should just change the positions & sizes. However,
// moving the first to last state transitions every time an item is
// added is a pain. This means that setGeometry on this widget must
// only be called after all items have been added.
void CarouselGraphicsWidget::resizeEvent(QResizeEvent *event)
{
QSize size = event->size();
// TODO view changes size, should we really be changeing the scene size?
scene()->setSceneRect(0, 0, size.width(), size.height());
// Use icons with same aspect ratio as VGA.
int tw = size.width();
int th = size.height();
if (tw > th*640/480) tw = th*640/480;
if (th > tw*480/640) th = tw*480/640;
int iw = tw / 2;
int ih = th / 2;
int isw = tw * 3 / 16;
int ish = th * 3 / 16;
int w = (size.width() - iw/2 - isw/2) / 2;
int h = (size.height() - ih/2 - ish/2) / 2;
int cx = size.width()/2;
int cy = (size.height() - ish)/2;
int num_objects = icons.size();
for (int i=0; i<num_objects; ++i) {
float angle = 2.0*PI*i / num_objects;
QRect r;
// When the icon is at the bottom of the screen (i=0), make it larger.
// Though it would look nicer if the size was based on the 'depth', this
// would involve a lot of scaling and then likely hit performance.
if (i == 0)
r.setRect(-iw/2, -ih/2, iw, ih);
else
r.setRect(-isw/2, -ish/2, isw, ish);
r.translate(cx, cy);
r.translate(w*sin(angle), h*cos(angle));
for (int j=0; j<num_objects; ++j) {
QState *state = states.at((i+j) % num_objects);
QObject *o = icons.at((num_objects-j) % num_objects);
// Set the position & make only the item at the bottom
// of the widget clickable
state->assignProperty(o, "geometry", r);
state->assignProperty(o, "enabled", i==0);
state->assignProperty(o, "focus", i==0);
}
}
if (states.size() > 1) {
QSignalTransition *transition;
QState *firstState = states.at(0);
QState *lastState = states.at(states.size()-1);
// Link to the next state - special case
transition = lastState->addTransition(this, SIGNAL(m_next()), firstState);
transition->addAnimation(animationGroup);
// Link to the previous state - special case
transition = firstState->addTransition(this, SIGNAL(m_back()), lastState);
transition->addAnimation(animationGroup);
machine->start();
}
}
示例11: main
int main(int argv, char **args)
{
QApplication app(argv, args);
QWidget *button;
{
//![0]
QStateMachine machine;
machine.setGlobalRestorePolicy(QStateMachine::RestoreProperties);
QState *s1 = new QState();
s1->assignProperty(object, "fooBar", 1.0);
machine.addState(s1);
machine.setInitialState(s1);
QState *s2 = new QState();
machine.addState(s2);
//![0]
}
{
//![2]
QStateMachine machine;
machine.setGlobalRestorePolicy(QStateMachine::RestoreProperties);
QState *s1 = new QState();
s1->assignProperty(object, "fooBar", 1.0);
machine.addState(s1);
machine.setInitialState(s1);
QState *s2 = new QState(s1);
s2->assignProperty(object, "fooBar", 2.0);
s1->setInitialState(s2);
QState *s3 = new QState(s1);
//![2]
}
{
//![3]
QState *s1 = new QState();
QState *s2 = new QState();
s1->assignProperty(button, "geometry", QRectF(0, 0, 50, 50));
s2->assignProperty(button, "geometry", QRectF(0, 0, 100, 100));
s1->addTransition(button, SIGNAL(clicked()), s2);
//![3]
}
{
//![4]
QState *s1 = new QState();
QState *s2 = new QState();
s1->assignProperty(button, "geometry", QRectF(0, 0, 50, 50));
s2->assignProperty(button, "geometry", QRectF(0, 0, 100, 100));
QSignalTransition *transition = s1->addTransition(button, SIGNAL(clicked()), s2);
transition->addAnimation(new QPropertyAnimation(button, "geometry"));
//![4]
}
{
QMainWindow *mainWindow = 0;
//![5]
QMessageBox *messageBox = new QMessageBox(mainWindow);
messageBox->addButton(QMessageBox::Ok);
messageBox->setText("Button geometry has been set!");
messageBox->setIcon(QMessageBox::Information);
QState *s1 = new QState();
QState *s2 = new QState();
s2->assignProperty(button, "geometry", QRectF(0, 0, 50, 50));
connect(s2, SIGNAL(entered()), messageBox, SLOT(exec()));
s1->addTransition(button, SIGNAL(clicked()), s2);
//![5]
}
{
QMainWindow *mainWindow = 0;
//![6]
QMessageBox *messageBox = new QMessageBox(mainWindow);
messageBox->addButton(QMessageBox::Ok);
messageBox->setText("Button geometry has been set!");
messageBox->setIcon(QMessageBox::Information);
QState *s1 = new QState();
QState *s2 = new QState();
s2->assignProperty(button, "geometry", QRectF(0, 0, 50, 50));
//.........这里部分代码省略.........
示例12: UIGraphicsButton
UIGraphicsRotatorButton::UIGraphicsRotatorButton(QIGraphicsWidget *pParent,
const QString &strPropertyName,
bool fToggled,
bool fReflected /* = false */,
int iAnimationDuration /* = 300 */)
: UIGraphicsButton(pParent, UIIconPool::iconSet(":/expanding_collapsing_16px.png"))
, m_fReflected(fReflected)
, m_state(fToggled ? UIGraphicsRotatorButtonState_Rotated : UIGraphicsRotatorButtonState_Default)
, m_pAnimationMachine(0)
, m_iAnimationDuration(iAnimationDuration)
, m_pForwardButtonAnimation(0)
, m_pBackwardButtonAnimation(0)
, m_pForwardSubordinateAnimation(0)
, m_pBackwardSubordinateAnimation(0)
{
/* Configure: */
setAutoHandleButtonClick(true);
/* Create state machine: */
m_pAnimationMachine = new QStateMachine(this);
/* Create 'default' state: */
QState *pStateDefault = new QState(m_pAnimationMachine);
pStateDefault->assignProperty(this, "state", QVariant::fromValue(UIGraphicsRotatorButtonState_Default));
pStateDefault->assignProperty(this, "rotation", m_fReflected ? 180 : 0);
/* Create 'animating' state: */
QState *pStateAnimating = new QState(m_pAnimationMachine);
pStateAnimating->assignProperty(this, "state", QVariant::fromValue(UIGraphicsRotatorButtonState_Animating));
/* Create 'rotated' state: */
QState *pStateRotated = new QState(m_pAnimationMachine);
pStateRotated->assignProperty(this, "state", QVariant::fromValue(UIGraphicsRotatorButtonState_Rotated));
pStateRotated->assignProperty(this, "rotation", 90);
/* Forward button animation: */
m_pForwardButtonAnimation = new QPropertyAnimation(this, "rotation", this);
m_pForwardButtonAnimation->setDuration(m_iAnimationDuration);
m_pForwardButtonAnimation->setStartValue(m_fReflected ? 180 : 0);
m_pForwardButtonAnimation->setEndValue(90);
/* Backward button animation: */
m_pBackwardButtonAnimation = new QPropertyAnimation(this, "rotation", this);
m_pBackwardButtonAnimation->setDuration(m_iAnimationDuration);
m_pBackwardButtonAnimation->setStartValue(90);
m_pBackwardButtonAnimation->setEndValue(m_fReflected ? 180 : 0);
/* Forward subordinate animation: */
m_pForwardSubordinateAnimation = new QPropertyAnimation(pParent, strPropertyName.toLatin1(), this);
m_pForwardSubordinateAnimation->setDuration(m_iAnimationDuration);
m_pForwardSubordinateAnimation->setEasingCurve(QEasingCurve::InCubic);
/* Backward subordinate animation: */
m_pBackwardSubordinateAnimation = new QPropertyAnimation(pParent, strPropertyName.toLatin1(), this);
m_pBackwardSubordinateAnimation->setDuration(m_iAnimationDuration);
m_pBackwardSubordinateAnimation->setEasingCurve(QEasingCurve::InCubic);
/* Default => Animating: */
QSignalTransition *pDefaultToAnimating = pStateDefault->addTransition(this, SIGNAL(sigToAnimating()), pStateAnimating);
pDefaultToAnimating->addAnimation(m_pForwardButtonAnimation);
pDefaultToAnimating->addAnimation(m_pForwardSubordinateAnimation);
/* Animating => Rotated: */
connect(m_pForwardButtonAnimation, SIGNAL(finished()), this, SIGNAL(sigToRotated()), Qt::QueuedConnection);
pStateAnimating->addTransition(this, SIGNAL(sigToRotated()), pStateRotated);
/* Rotated => Animating: */
QSignalTransition *pRotatedToAnimating = pStateRotated->addTransition(this, SIGNAL(sigToAnimating()), pStateAnimating);
pRotatedToAnimating->addAnimation(m_pBackwardButtonAnimation);
pRotatedToAnimating->addAnimation(m_pBackwardSubordinateAnimation);
/* Animating => Default: */
connect(m_pBackwardButtonAnimation, SIGNAL(finished()), this, SIGNAL(sigToDefault()), Qt::QueuedConnection);
pStateAnimating->addTransition(this, SIGNAL(sigToDefault()), pStateDefault);
/* Default => Rotated: */
pStateDefault->addTransition(this, SIGNAL(sigToRotated()), pStateRotated);
/* Rotated => Default: */
pStateRotated->addTransition(this, SIGNAL(sigToDefault()), pStateDefault);
/* Initial state is 'default': */
m_pAnimationMachine->setInitialState(!fToggled ? pStateDefault : pStateRotated);
/* Start state-machine: */
m_pAnimationMachine->start();
/* Refresh: */
refresh();
}