感觉好奇怪,我觉得这个技术应该是挺实用的,而且你还可以根据它的大体相关的特性为你的界面增加更多的效果,怎么这文章很少人看。看来得对这个文章好好的重新再整理下才行,因为这个再项目开发中合理的应用可以给你的项目增加一些额外的加分。所以需要大家好好的实现才行,在这里我将实现一些动画,然后将源代码上传与大家共享,希望大家能和我一起学习。说实话Qt真是个好东西。(这个先暂停下,得好好准备材料)
关于窗口的动画效果,开始的时候找了很多材料,但是都不怎么看的下去,最终还是决定要好好静下心来将它搞定,而且一定还有是有图有真相的那种。
对于这个窗口的移动的动画效果,主要是通过鼠标单击按钮的时候产生的信号让状态发生改变,
当第一次单击的时候,将从状态1转变为状态2.第二次的时候从状态2,转变为状态1.,同时为了装换的过程中更加流畅,给其增加了动画的效果。
在这里简单的介绍一下。
/* 对于以下代码中 label1 为一个红色的QLabel label2为一个蓝色的QLabel button2为一个QPushButton*/
首先从启动一个状态机
QStateMachine *machine = new QStateMachine();
然后定义一个状态state1
QState *state1 = new QState(machine);
然后为这个状态分配属性
state1->assignProperty(label1,"pos",QPoint(0,0));
state1->assignProperty(label2,"pos",QPoint(width+1,0));
然后将状态1设为初始状态(这个在状态机启动之前必须要确定,否则状态机将无效)
machine->setInitialState(state1);
接着我们就创建第二个状态state2
QState *state2 = new QState(machine);
state2->assignProperty(label1,"pos",QPoint(-width,0));
state2->assignProperty(label2,"pos",QPoint(0,0));
下面我们将创建一个信号转换,这个主要是实现通过信号的产生让状态发生装换
QSignalTransition *transition1 = state1->addTransition(button2,SIGNAL(clicked()),state2);
增加动画效果,这样将使状态之间过渡的更加流畅,舒服
transition1->addAnimation(animal1);
transition1->addAnimation(animal2);
QSignalTransition *transitional2 = state2->addTransition(button2,SIGNAL(clicked()),state1);
transition2->addAnimation(animal1);
transition2->addAnimation(animal2);
现在我们就可以启动我们的状态机啦!
machine->start();
文章中的animal的代码:
QPropertyAnimationa *animal1= new QPropertyAnimation(label1,"pos");
animal1->setDuration(3000);
QPropertyAnimation *animal2 = new QProPertyAnimation(label2,"pos");
animal2->setDuration(3000);
对于这里只对pos这个属性进行了动画方面,如果想要做其他的也是可以试一试的。