學習筆記 4 狀態機與動畫結合

2021-06-29 13:27:33 字數 2277 閱讀 6583

學習日記一和學習日記二分別學習了qt動畫框架和qt狀態機框架。 今天學習如何將兩者結合起來。

回顧一下狀態機的幾個要素:狀態機、狀態、切換(qtransition)。   

那麼如何在加入動畫呢,其實很簡單,我們通過切換來改變狀態,在切換中加入動畫就行了。

直接上例子:

qstatemachine* statemachine = new qstatemachine;  //建立狀態機

//建立狀態1

qstate* showstate = new qstate(statemachine);

showstate->assignproperty(ui->pushbutton_2,"geometry",qrect(100,100,120,30));

showstate->assignproperty(ui->pushbutton_2,"opacity",1.0);

//建立狀態2

qstate* hidestate = new qstate(statemachine);

hidestate->assignproperty(ui->pushbutton_2,"geometry",qrect(0,0,1,1));

hidestate->assignproperty(ui->pushbutton_2,"opacity",0.1);

//新增狀態1的切換, 為切換新增動畫

qsignaltransition* showtransition = showstate->addtransition(this,signal(sig_hide()),hidestate);

qpropertyanimation* geoanimation = new qpropertyanimation(ui->pushbutton_2,"geometry");

geoanimation->setduration(2000);

geoanimation->seteasingcurve(qeasingcurve::inoutbounce);

qpropertyanimation* opyanimation = new qpropertyanimation(ui->pushbutton_2,"opacity");

opyanimation->setduration(2000);

showtransition->addanimation(geoanimation);

showtransition->addanimation(opyanimation);

//新增狀態2的切換,為切換新增動畫

qsignaltransition* hidetransition = hidestate->addtransition(this,signal(sig_show()),showstate);

qpropertyanimation* geoanimation2 = new qpropertyanimation(ui->pushbutton_2,"geometry");

geoanimation2->setduration(2000);

geoanimation2->seteasingcurve(qeasingcurve::outcirc);

qpropertyanimation* opyanimation2 = new qpropertyanimation(ui->pushbutton_2,"opacity");

opyanimation2->setduration(2000);

hidetransition->addanimation(geoanimation2);

hidetransition->addanimation(opyanimation2);

statemachine->setinitialstate(hidestate); //設定初始化狀態

statemachine->start(); //啟動狀態機

用ui設計師在widget中新增了兩個按鈕,ui->pushbutton和ui->pushbutton_2  。    為ui->pushbutton新增乙個按下的槽函式。分別觸發sig_show()和sig_hide()兩個訊號。

通過這兩個訊號來改變ui->pushbutton_2的狀態。

總結今天的內容就是乙個函式:qsignaltransition::addanimation();    值得注意的是我們這裡的動畫沒有設定值(setkeyvalueat()),這裡的值會根據狀態中的值來變化,比如:從狀態1到狀態2    按鈕2的幾何會從qrect(100,100,120,30)   到 qrect(0,0,1,1)。

至於怎麼解決這個問題以後再說。

學習筆記 狀態機

狀態機是有限狀態自動機的簡稱,是現實事物執行規則抽象而成的一種數學模型 將電路的全部工作方式,分成幾個場景,這些場景的工作方式明顯不同,然後將這些場景通過數學模型表示出來 輸出只和狀態有關而與輸入無關 狀態表 輸出不僅和狀態有關而且和輸入有關係 狀態表 人有三個狀態健康,感冒,中。觸發的條件有淋雨 ...

Unity Animator動畫狀態機

建立 檢視和修改animator controller檔案。右邊部分 網格化布局區域 entry 狀態機入口 exit 狀態機出口 anystate 任意狀態 state 橙色 預設狀態,進入狀態機時預設連線該動畫 灰色 一般狀態,可以由任意狀態進入該狀態 左邊部分 狀態機的動畫層和引數 點選右側設...

學習筆記 FPGA基礎4 狀態機

狀態暫存器由一組觸發器組成,用來記憶狀態機當前所處的狀態,狀態的改變只發生在時鐘的跳變沿 狀態是否改變 如何改變,取決於組合邏輯f的輸出,f是當前狀態和輸入訊號的函式 狀態機的輸出由組合邏輯g提供,g是當前狀態和輸入訊號的函式 常規狀態機 狀態空間 獨熱碼 每個狀態只有乙個暫存器置位,解碼邏輯簡單 ...