【发布时间】:2013-09-17 21:53:45
【问题描述】:
嗯,我正在开发一个 Qt 应用程序,我想使用 Qt State Framework 来制作一些动画。
第一: 如何通过使用状态转换将水平布局中包含的一组按钮动画化为另一个垂直布局?
第二: 处于状态时如何显示小部件?例如一个菜单:当用户点击菜单中的一个按钮时,这个小部件(之前被widget->hide()隐藏的)就会显示出来...???
这是一个代码示例:
boxInsert = new BoxInsert(this);
boxInsert->hide ();
btn1 = new QPushButton("Introducir", this);
btn2 = new QPushButton("Informe", this);
btn3 = new QPushButton("Salir", this);
QStateMachine *machine = new QStateMachine(this);
QState *st1 = new QState(machine);
st1->setObjectName ("menuMode");
st1->assignProperty (btn1, "pos", QPointF(center - btn1->width () / 2, 20));
st1->assignProperty (btn2, "pos", QPointF(center - btn1->width () / 2, 40));
st1->assignProperty (btn3, "pos", QPointF(center - btn1->width () / 2, 60));
st1->assignProperty (boxInsert, "visible", QVariant(false));
QState *st2 = new QState(machine);
st2->setObjectName ("barMode");
st2->assignProperty (btn1, "pos", QPointF(40, 0));
st2->assignProperty (btn2, "pos", QPointF(40, 0));
st2->assignProperty (btn3, "pos", QPointF(40, 0));
st1->assignProperty (boxInsert, "visible", QVariant(true));
machine->setInitialState (st1);
QAbstractTransition *t1 = st1->addTransition (btn1, SIGNAL(clicked()), st2);
//QSequentialAnimationGroup *sq1 = new QSequentialAnimationGroup;
//sq1->addPause (250);
t1->addAnimation (new QPropertyAnimation(btn1, "pos"));
t1->addAnimation (new QPropertyAnimation(btn2, "pos"));
t1->addAnimation (new QPropertyAnimation(btn3, "pos"));
t1->addAnimation (new QPropertyAnimation(boxInsert, "visible"));
machine->start ();
【问题讨论】:
-
动画流体 GUI 是 QML 的发明,您可能想尝试一下
-
为一组按钮设置动画是什么意思,它们应该改变颜色吗?
标签: c++ qt qstatemachine