建立狀態,設定狀態中的屬性,設定初始狀態,設定狀態裝換條件、動畫,啟動狀態機
int nmargin = 9;
int ninitwidth = m_pselmoldform->width();
int ninitheight = m_pselmoldform->height();
int nconfepyformw = m_pconfepyproform->width();
int nconfepyformh = m_pconfepyproform->height();
//設定初始狀態狀態
m_pstatemachine = new qstatemachine;
qstate *initialstate = new qstate(m_pstatemachine);
initialstate->assignproperty(this, "size",
qsize(ninitwidth+2*nmargin, ninitheight+2*nmargin));
initialstate->assignproperty(m_pselmoldform, "pos", qpoint(nmargin, nmargin));
initialstate->assignproperty(m_pconfepyproform, "pos", qpoint(nmargin, -nconfepyformh));
//設定配置空白工程狀態
qstate *confepystate = new qstate(m_pstatemachine);
confepystate->assignproperty(this, "size",
qsize(nconfepyformw+2*nmargin, nconfepyformh+2*nmargin));
confepystate->assignproperty(m_pselmoldform, "pos", qpoint(-ninitwidth, nmargin));
confepystate->assignproperty(m_pconfepyproform, "pos", qpoint(nmargin, nmargin));
//設定狀態機的出示狀態
m_pstatemachine->setinitialstate(initialstate);
//設定狀態轉換方式,由初始狀態到配置空白工程的轉換方式
qsignaltransition *traninittoconfepy =
initialstate->addtransition(m_pselmoldform,
signal(sg_createemptyproject()),
confepystate);
qsequentialanimationgroup *ptoconf_sa_group = new qsequentialanimationgroup;
ptoconf_sa_group->addpause(300);
ptoconf_sa_group->addanimation(new qpropertyanimation(this, "size"));
ptoconf_sa_group->addanimation(new qpropertyanimation(m_pselmoldform, "pos"));
ptoconf_sa_group->addanimation(new qpropertyanimation(m_pconfepyproform, "pos"));
traninittoconfepy->addanimation(ptoconf_sa_group);
//設定狀態轉換方式,由配置空白工程到初始狀態的轉換方式
qsignaltransition *tranbacktoinit =
confepystate->addtransition(m_pconfepyproform,
signal(sg_oncancle()),
initialstate);
qsequentialanimationgroup *pbacktoinit_sa_group = new qsequentialanimationgroup;
pbacktoinit_sa_group->addpause(300);
pbacktoinit_sa_group->addanimation(new qpropertyanimation(m_pconfepyproform, "pos"));
pbacktoinit_sa_group->addanimation(new qpropertyanimation(this, "size"));
pbacktoinit_sa_group->addanimation(new qpropertyanimation(m_pselmoldform, "pos"));
tranbacktoinit->addanimation(pbacktoinit_sa_group);
//啟動狀態機
m_pstatemachine->start();
QT狀態機框架
qt的state machine framework是在qt4.6中引入的,其理論基礎是harel的statechart,通過定義一系列的可能狀態,以及系統如何在這些狀態中進行轉換 transitions between states 來描述整個狀態機的執行。qt的狀態機體系主要包括三部分模組 光有...
qt 狀態機小記
狀態機 狀態 訊號 狀態機框架與qt的元物件系統是緊密結合的,例如qt的事件系統用來驅動狀態機,狀態機中狀態間的切換可以由訊號來觸發。關於狀態機可以參考the state machine framework關鍵字。如下的示例中,狀態機被乙個按鈕控制,包含3個狀態s1 s2 s3,s1為初始狀態,當單...
狀態機 狀態機0
近半年都忙於做專案,沒有太多的時間去整理和總結在專案中用過的技術 個人還是覺得技術需要總結提煉和沉澱的,忙到沒時間去總結提公升其實不 是什麼好事,這次講下狀態機,在戰鬥型別的遊戲中角色有多種不同的狀態,而狀態的切換錯綜複雜,23種設計模式中有一種模式叫做狀態模式,不過 這種模式是把狀態切換條件放到各...