QML中的state 狀態

2022-06-07 19:39:09 字數 1180 閱讀 5233

qml中的狀態其實很好理解,任何事物在某一事件都是有乙個狀態的。

比如你看到的乙個視窗,這個時候裡面的文字和正處於某個狀態中。比如乙個超連結,你點選了,發現顏色變了,你按了ctrl+a,整個窗體好像被蒙上了一層布,這也是狀態的改變。所有的一切都是狀態。

因此,qt提供這個功能。比如你想要變換文字的顏色,你會怎麼做?在單擊事件中進行響應是可以的。那如果是每一次單擊都是要變色呢(不是隨機顏色)?那你的槽函式**會非常龐大。因為我們可以事先定義好一些狀態,一旦觸發,就讓它更換狀態就好了。

**來得最直接了,下面是乙個改變文字顏色的小例子,當滑鼠鬆開,文字變藍色。

[plain]view plain

copy

import qtquick 2.6  

import qtquick.window 2.2  

window   

}  text   

},//注意這裡的逗號  

這裡有兩個特殊的地方,第一就是states用的是中括號,,而且每個state之間使用逗號來隔開;第二是propertychanges,這個元素用來對物件進行操作。如果你檢視幫助文件,它的屬性只有幾個。那麼我設定的color之類的是**來的呢?

在我們指定了target之後,就是對要操作的物件進行操作了,所以設定color之類的,其實是我們的text的屬性。也就是說,你要對text的哪些屬性進行更改,只要寫在這個元素裡面就可以了。當該狀態被啟用,那麼它就會去幫你完成這個狀態的變換。

很多人會有個疑問,我變換了顏色,如果我下次變換文字大小,那這個文字是藍色還是紅色呢?

propertychanges提供了乙個restoreentryvalue屬性。當它為真,表示你下次更改其它屬性的時候,它將會還原之前的更改。當它為假,之前的更改會被保留。

狀態 State 模式

物件狀態影響物件行為 物件擁有不同的狀態,往往會行使不同的行為.1 動機 在軟體構建過程中,某些物件的狀態如果改變,其行為也會隨之而發生變化。比如文件處於唯讀狀態,其支援的行為和讀寫狀態支援的行為就可能完全不同。如何在執行時根據物件的狀態來透明地更改物件的行為?而不會為物件操作和狀態轉化之前引入緊耦...

狀態模式 State

個人理解 核心是context維護乙個當前狀態,並在invoke狀態方法時,將context維護的當前狀態更新至下一狀態 uml類圖 實現 using system namespace decoratormode public class agecontext public void printag...

state 狀態模式

include include using namespace std 1 將 state宣告為 context的友元類 friend class 其作用是讓 state模式訪問 context 的 protected介面 changesate 2 state 及其子類中的操作都將 context ...