qt狀態機的實現

2021-08-25 07:26:28 字數 2458 閱讀 6179

建立狀態,設定狀態中的屬性,設定初始狀態,設定狀態裝換條件、動畫,啟動狀態機

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種設計模式中有一種模式叫做狀態模式,不過 這種模式是把狀態切換條件放到各...