https://baijiahao.baidu.com/s?id=1626185034227877948&wfr=spider&for=pc
關於Qt狀態機的介紹就懶得說了,網絡上一搜一大堆,反正也看不懂。我關心的就是怎么使用,畢竟我只是一個編寫應用程序的程序員。簡單粗暴地理解一下狀態機就是一個管理很多狀態的機器。
組成
一個最簡單的狀態機應該包括狀態機(QStateMachine)、狀態(QState)和過渡(QAbstractTransition子類)。狀態機就相當於一個容器,過渡就是將某一個狀態切換到另一個狀態(當然也可以不切換)。
使用
1. 狀態(QState)設置好此狀態下的各對象的屬性。
2. 通過過渡指定它的目標狀態。
3. 將狀態添加到狀態機中。
4. 狀態機指定一個初始狀態,然后調用start啟動。
QState通過assignProperty來關聯對象的屬性。本例的意思就是在狀態1的時候按鈕的文本是small,大小為(50,,50)。在狀態2時按鈕的文本是big,大小為(100,100)。 在這里我們並沒有創建QAbstractTransition子類的對象,而是調用QState的addTransition來添加狀態的過渡,該函數的返回值就是一個QSignalTransition(QAbstractTransition的子類)對象。這個函數的意思就是通過按鈕的clicked信號觸發狀態的轉換。 最后創建一個狀態機的對象把已經設置好的狀態添加進去,設置好初始狀態后啟動即可。運行效果如下:
這里需要注意的是一個狀態不止能綁定一個對象的屬性,如果是這樣的話那它存在的意義好像就不大了。在復雜界面中往往會遇到一個某一時刻很多控件的狀態是固定的,通過手動一個一個去設置控件的狀態會顯得很麻煩,這時候狀態機就能幫上大忙了。狀態機設置一次就行了,代碼簡潔明了。還需要注意的一點是狀態機也不止是用於界面上的,它也可以用於其他對象,只要是QObject的后代又具有屬性的。只不過用於界面是最容易理解罷了。