• 11005阅读
  • 7回复

[原创]Qt状态机 实例 [复制链接]

上一主题 下一主题
离线hicjiajia
 

只看楼主 倒序阅读 楼主  发表于: 2011-01-25
— 本帖被 XChinux 执行加亮操作(2011-01-25) —
    Qt4.6引入了动画框架,摆脱了以往控件只能安静的呆在布局里的时代,利用Qt提供的动画框架,我们可以让控件跳起舞来,呵呵,很有趣啊… 在Qt4.7中又引入了Qt quick技术,其中的QML语言也是专门来定制GUI动画效果的,这是一种新的GUI动画机制,我刚也接触了些,语法类似CSS,实现预定义的动画很方便,所见即所得,路还得一步步走,先学习一下传统的Qt动画方式——状态机
这里先直接给出例子(见图):


下面是源码:
  1. #include <QApplication>
  2. #include <QStateMachine>
  3. #include <QPushButton>
  4. #include <QSignalTransition>
  5. #include <QPropertyAnimation>
  6. int main(int argc,char **argv)
  7. {
  8.     QApplication app(argc,argv);
  9.     QWidget *w=new QWidget;
  10.     w->resize(240,320);
  11.     QPushButton *button = new QPushButton("hicjiajia",w);
  12.     QStateMachine *machine = new QStateMachine;     //新建状态机
  13.     QState *state1 = new QState(machine);     //状态1
  14.     state1->assignProperty(button,"geometry",QRect(0,0,80,30));    //绑定button的geomertry属性
  15.     machine->setInitialState(state1);     //state1设为初始化状态
  16.     QState *state2 = new QState(machine);
  17.     state2->assignProperty(button,"geometry",QRect(w->width()-30,w->height()-80,30,80));
  18.     QFont font = QFont("Airl", 12);
  19.     state2->assignProperty(button,"font",font);     //状态2字体
  20.     QPropertyAnimation *ani=new QPropertyAnimation(button,"geometry");
  21.     ani->setDuration(2000);
  22.     ani->setEasingCurve(QEasingCurve::OutBounce);   //动画效果—弹跳
  23.     QSignalTransition *transition1=state1->addTransition(button,SIGNAL(clicked()),state2);      //动画触发信号
  24.     transition1->addAnimation(ani);
  25.     QSignalTransition *transition2=state2->addTransition(button,SIGNAL(clicked()),state1);
  26.     transition2->addAnimation(ani);
  27.     machine->start();     //开启状态机
  28.     w->show();
  29.     return app.exec();
  30. }

离线梅克斯
只看该作者 1楼 发表于: 2011-01-25
支持了
只看该作者 2楼 发表于: 2011-01-25
楼主感谢分享.
assignProperty 方法的第二个参数有没有其他的呢?
能否给个完整的.你这个是坐标状态改变嘛.
如果我的界面是大小不固定的,用了layout的,能否让他在两个layout布局中切换呢?

比如从这个vlayout的第二格,变到另外个hlayout的第一格.
只看该作者 3楼 发表于: 2011-01-25
目前QT例子里,只查到  "text" 和"geometry" 状态变化.
其他的状态变化参数完全不知道有些什么.

比如背景图片变化啊这些
布局变化啊这些.
离线hicjiajia

只看该作者 4楼 发表于: 2011-01-26
回 3楼(算了不说了) 的帖子
assignProperty() 可以绑定控件的所有属性,绑定其他属性的例子我再搞下..
只看该作者 5楼 发表于: 2011-01-26
嗯,我搜了很久,也没有找到介绍这个属性的.

QT例子里只有text和geometry两种.

但是很多人是用layout布局的.我试过用geometry来对layout布局里的控件做移动.
问题很多.

不知道这个状态机能支持在layout中的控件不
离线alexltr

只看该作者 6楼 发表于: 2011-01-26
我也很想知道控件的哪些属性可以设定出动画效果,除了尺寸大小,位置等属性。

在Gridlayout中我试过spacing属性可以产生明显的动画效果。
Alignment是不是属性呢? 我试过但没有动画效果。
spacing属性可以设定和返回值。
而Alignment只可以设定不可以返回,是不是这种情况就没有动画效果了呢?
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
只看该作者 7楼 发表于: 2011-02-12
求解答啊
快速回复
限100 字节
 
上一个 下一个