


版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、詳解Qt中的狀態機機制(一)*歡迎訪問我的博客:*狀態機,簡寫為FSM(Finite State Machine ),狀態機由狀態寄存器 和組合邏輯電路構成,能夠根據控制信號按照預先設定的狀態進行狀態 轉移,是協調相關信號動作、完成特定操作的控制中心。在GUI開發的時候,界面復雜的邏輯往往令人抓狂,邏輯都不清晰,代碼寫起來更加費勁。用戶界面設計中采用狀態驅動,就可以使得 GUI的邏輯更加清晰。根據當前狀態的不同,顯示不同的界面。程序界 面可以被看作顯示對應不同場景,或者是通過改變外觀響應用戶的交互。通常情況下,界面中很多個組件的改變是并發進行的,這樣的界面可以看作從一個狀態改變到另外一個狀態。
2、今天我們來看看qt中的狀態機框架,qt把它作為QtCore中的一 個模塊,也足見其重要性:Qt狀態機框架提供了一些類來創建執行狀態圖,狀態圖為一個系 統如何對外界激勵進行反應提供了一個圖形化模型,該模型是通過定義一些系統可能進入的狀態以及系統怎樣從一個狀態切換到另一個狀態 來實現的。事件驅動的系統的一個關鍵特性就是它的行為不總是僅僅依 賴于前一個或者當前的事件,而且也依賴于將要執行的事件。通過使用狀態圖,這些信息會非常容易進行表達。狀態機框架提供了一套API以 及一種執行模型,可以有效地將狀態圖的元素和語義嵌入到Qt應用程序中。該框架與Qt的元對象系統結合緊密:例如,不同狀態之間的轉 化可由信
3、號觸發,信號驅動,且狀態可配置用于QObject的屬性和方法。在進入今天的主題之前,我們先來了解三個概念:狀態(State ):是靜態的東西,對一系列對象屬性的一組靜態描述和 配置。過渡(Transition ):是一段時間或者空間的描述,狀態之間切換的整 個過程,或者描述的是不同屬性值之間變化的一個過程。動畫(Animation ):是動態的一個東西,可以看作是過渡的執行者, 通過在屬性值上應用動畫類型來創建。動畫類型會對屬性值進行插值, 從而創建出平滑的過渡效果。 要創建動畫,需要為某個屬性使用恰當的 動畫類型;應用的動畫也依賴于需要實現的行為類型。這三者之間的聯系較為密切,只定義了狀態,
4、它是一個死(靜態)的東 西,所以就需要過渡,來讓它活起來。但是過渡這個過程是如何實現, 就需要動畫來執行,從而讓過的的平滑,給用戶良好的視覺效果。在Qt中,這三者之間的關系有沒有那么明確,但是明確這三個概念, 對于我們理解qt中的狀態機制會有很大的幫助。一、狀態對于初學者來說,我建議從qml中去學習了解狀態機的概念會更快。它 描述性的語言,會讓人很快的去接受這些概念和使用。在你了解了qml中狀態機的使用后,再來了解 qt中的狀態機就會發現很簡單。今天我 們就先從qml中了解一些狀態機的魅力。在qml中,繼承自Item的控件都會有一個states屬性,該屬性有用戶自定義的屬性組組成。可以通過Pr
5、opertyChanges、ParentChange、StateChangeScript、AnchorChanges這些控件對這個狀態中的屬性做 定義和描述。下面是一個簡單的代碼示例:javascriptview pla in copy1.import QtQuick 2.02.3.4.Rectangle 5.id:root6.width:100; height:1009. states:Statename: "red_color",PropertyChanges targetStatename: &quo
6、t;blue_color"PropertyChanges targetroot; color:"red" root; color:"blue" 1、漸變Trsnsrion用笑指定一個尅直其中可以包含動畫類塑, 即遵過在環冋狀態抽屬性值之間進行插借土生動畫效果,從而 訂狀在切抓孌得事郴管。日囲和呵以荷運具林旳厲切如果在這祥的 日GhWo咲型中使用了動iSj,那么肖這個園性的 值改變時都合應用動i亦在狀態改變的過程中,我們可以指定一個過渡,可以采用Tran sitionBehavior這兩個控件,可以在這個過渡中指定各種動畫, 從而達到想要java
7、script的交互效果。1.import QtQuick 2.02.3.Rectangle 4.id:rect5.width:100; height:1006.color:"red"7.8.MouseArea 9.id:mouseArea10.anchors.fill:parent11.view plain copy12.13.states:State 14.name: "moved" when: mouseArea.pressed15.PropertyChanges target:rect;x: 50; y: 50 16.17.18.transitio
8、ns:Transition19.NumberAnimation properties:"x,y" ; easing.type:EasingnOutQuad 20.21. 這個小示例借助Item的transitions 屬性,qt幫助文檔上的描述,This property holds the list of transitions for this item. These define the transitions to be applied to the item whenever it changes its state.,只有在狀態屬性發生改變,才會觸發這個漸變,再
9、運用NumberAnimation ,完成這個漸變。javascript view pla in copy1.import QtQuick2.02.3.Rectangle 4.width:4005.height:4006.7.Rectangle 8.id:coloredRect9.width:10010.height:10011.anchors.centerIn:parent12.13.color:"red"14.Behavior on color 15.ColorAnimation16.17.18.MouseArea 19.id:mouser20.anchors.fill
10、:parent21.hoverEnabled:true22.23.24.states:State 25.name: "GreenState"26.when: mouser.containsMouse27.28.Propertychanges 29.target:coloredRect30.color:"green"4. 這串代碼也實現了狀態的漸變,區別在于 Behavior這個控件不僅可以 用于狀態的改變,在沒有使用狀態,只要安裝 Behavoir監控的屬性發 生了改變,就會運用相應的動畫平滑的完成這個漸變, 使用起來相當方 便。以上
11、的兩部分講的就是狀態和漸變,借助qml這種描述性語言,我們也可很方便的完成GUI的開發,很容易做出漂亮的效果。在上面的實例中, 大家發現也有很多動畫,所以說,狀態、漸變、動畫三者關系是很密切 的,下面,我們來看看動畫。三、動畫rr hC-1 rriNlhpmgniatcCDicrkumalionorni math iHaFiAnimanonBsralhlAiiin3tioador31i*Ti3tjciAnmnrtnauispAnmsit dirrtqinanon.PropertYdiDnuonlialScriplAdioi彳nth吵nrim沖,rc pedy dn imatc p.屈垃哋良鬧儲
12、皈宦的功畫對象可殳馳旳瞄請協緒戎劉風由訴/、原謹是住貞甜確勺(性價之巨遅廳乩匾 兀樂平対的野険耙 隔蟲上M EtEenm測 畫訣了旳離孫刖師產和則逆行孑同0倔值*/上面的圖是qtquick中的所有用到的動畫的一個關系圖,他們都繼承自Animation這個最基礎的控件,這個控件提供了動畫的控制,開始,暫 停,重播,播放次數。此外它還提供了兩個信號,started ()和stopped(),以供其他控件去捕捉該信號去響應其他的槽函數。在平時開發中 運用較多的是PropertyAnimation 這個控件。Qt系統中強大的元對象系統,使得對屬性的操作很方便,所以這個PropertyAnimation 就可以對這些屬性做動畫。而且它還帶Easing Curve緩和曲線,qt中提供了四十多種緩和曲線,讓開發者更方便的定義動畫的效果。此外還有ParallelA nimatio n、Seque ntialA nimation這兩個控件,一個是平行動畫組,一個是串行動畫組,這兩個又可以相互的嵌套,使用非常的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年電磁爐磁條項目投資價值分析報告
- 2025至2030年母線項目投資價值分析報告
- 2025至2030年復方克霉唑栓項目投資價值分析報告
- 2025至2030年塑料制品廢品回收行業深度研究報告
- 輸液過敏反應護理查房
- 2025至2030年公司標志旗行業深度研究報告
- 接地電阻的測量-接地及接地的必要性(高電壓技術)
- 2025至2030年中國超市行業商業模式與投資趨勢分析報告
- 2025年防水板項目可行性研究報告
- 2025年純銅執手門鎖項目可行性研究報告
- 外研版(2025新版)七年級下冊英語期中復習:Unit 1~3+期中共4套學情調研測試卷(含答案)
- 成人重癥患者人工氣道濕化護理專家共識 解讀
- (完整版)PHQ-9抑郁癥篩查量表
- 山中問答教學設計
- 基于高中思想政治學科核心素養的教學研究與實踐PPT課件
- 礦山及其他工程破損山體植被恢復技術(DOC25頁)
- 鋁合金門窗、百葉施工組織設計
- 畢業設計(論文)-網球自動撿球機設計
- 影視音樂外文文獻及翻譯
- 腹主動脈瘤的診斷與治療文檔資料
- Cultural Differences in Everyday Conversation between Chinese and English
評論
0/150
提交評論