Cpper
C/C++高级工程师 Android高级软件工程师 IT集成工程师 音频工程师 熟悉c,c++,java,c#,py,js,asp等多种语言 程序猿
class Widget : public QWidget
{
    Q_OBJECT
public:
    
explicit Widget(QWidget *parent = 0);
    
~Widget();
private:
    
void resizeEvent(QResizeEvent* event);
private:
    QStateMachine
* mMachine;
    QSignalTransition
* mTransition;
    QState
* mMaxState;
    QState
* mMinState;
    QPushButton
* mButton;
    
bool mResized;
};

Widget::Widget(QWidget *parent):
QWidget(parent)
{
    mResized 
= false;
    resize(
640,480);
}

Widget::
~Widget()
{
}

void Widget::resizeEvent(QResizeEvent* event)
{
    
if(size().height() == 0)
    {
        close();
        
return;
    }
    
if(mResized)
        
return;

    mButton 
= new QPushButton(this);
    mButton
->setText("Click");

    mResized 
= true;
    QPoint p 
= pos();
    QSize s 
= size();

    mMachine 
= new QStateMachine(this);
    mMaxState 
= new QState(mMachine);
    mMaxState
->assignProperty(this,"geometry",QRect(p,s));
    
//connect(mMachine,SIGNAL(finished()),this,SLOT(callClose()));
    
    mMinState 
= new QState(mMachine);
    mMinState
->assignProperty(this,"geometry",QRect(p.x(),p.y()+s.height()/2,s.width(),0));
    
//connect(mMinState,SIGNAL(entered()),this,SLOT(callClose()));
    mMachine->setInitialState(mMaxState);

    QPropertyAnimation
* ani1 = new QPropertyAnimation(this,"geometry");
    ani1
->setDuration(300);
    ani1
->setEasingCurve(QEasingCurve::Linear);

    QSignalTransition
* transition = mMaxState->addTransition(mButton,SIGNAL(clicked()),mMinState);
    transition
->addAnimation(ani1);

    mMachine
->start();
}


不过有2个问题,当动画结束的时候,和这句相关
connect(mMinState,SIGNAL(entered()),this,SLOT(callClose()));
可以退出程序
但是动画没执行 有空看下
setSizeConstraint(QLayout::SetNoConstraint);
posted on 2015-01-02 21:23 ccsdu2009 阅读(3029) 评论(0)  编辑 收藏 引用 所属分类: QT编程

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理