Qt的動(dòng)畫機(jī)制屯掖,能用在QWidget性湿、QGraphicWidget纬傲、以及在QML中也有部分應(yīng)用的模型,這里只是先舉兩個(gè)小的例子肤频,目前也沒有太深入研究叹括。
以QPropertyAnimation為例,在Widget類中有另一個(gè)m_subWidget子類宵荒,點(diǎn)擊按鈕后汁雷,會(huì)以動(dòng)畫的形式顯示出m_subWidget界面。
//定義槽連接
connect(btn,&QPushButton::clicked,this,[&](){
showAnimation();
});
void Widget::showAnimation()
{
m_subWidget->show();
QPoint pStart,pEnd;
pStart = mapToGlobal(QPoint(0-width(),0));
pEnd = mapToGlobal(QPoint(0,0));
animation = new QPropertyAnimation(m_subWidget, "geometry");
animation->setDuration(1000); //設(shè)置動(dòng)畫時(shí)間
animation->setStartValue(QRect(pStart, QSize(width(),height())));//設(shè)置動(dòng)畫開始位置
animation->setEndValue(QRect(pEnd, QSize(width(),height())));//設(shè)置動(dòng)畫結(jié)束位置
animation->setEasingCurve(QEasingCurve::SineCurve);
animation->start();
}
根據(jù)幫助文檔的說明报咳,QSequentialAnimationGroup可以將多個(gè)個(gè)動(dòng)畫關(guān)聯(lián)起來侠讯,而QParallelAnimationGroup類則會(huì)同時(shí)展示多個(gè)動(dòng)畫。
QPushButton button("Animated Button");
button.show();
QPropertyAnimation anim1(&button, "geometry");
anim1.setDuration(3000);
anim1.setStartValue(QRect(0, 0, 100, 30));
anim1.setEndValue(QRect(500, 500, 100, 30));
QPropertyAnimation anim2(&button, "geometry");
anim2.setDuration(3000);
anim2.setStartValue(QRect(500, 500, 100, 30));
anim2.setEndValue(QRect(1000, 500, 100, 30));
QSequentialAnimationGroup group;
group.addAnimation(&anim1);
group.addAnimation(&anim2);
group.start();