Qt SCXML 概述

Qt SCXML 模塊提供將從 SCXML (狀態圖錶 XML) 文件創建的狀態機,嵌入 Qt 應用程序的類。可以使用任何適閤工具 (譬如:文本編輯器或模擬器) 創建 SCXML 文件,隻要它們遵從 SCXML 規範 ,采用限定和擴展的描述在 SCXML 閤規 .

可以采用封裝 SCXML (狀態圖錶 XML) 文件替換部分應用程序邏輯。這使能夠創建應用程序邏輯和用戶界麵 (使用 Qt Quick 或 Qt Widgets 實現) 之間的清晰劃分。

Qt SCXML 模塊不同於 狀態機框架 Qt State Machine module in that Qt SCXML provides a 符閤處理器 可以剖析和處理 符閤 SCXML 文檔 。在 Qt SCXML,狀態機讀取自單獨 SCXML 文件,和集成到 Qt 應用程序通過實例化 QScxmlStateMachine 類並動態加載 SCXML 文件或通過使用 Qt SCXML Compiler 以生成子類 QScxmlStateMachine 實例。與 SCXML 文檔通信的信號和方法,提供通過 QScxmlStateMachine 類。

基本狀態機概念, state , transition ,和 event 基於那些 SCXML 規範。狀態圖錶提供係統如何應答刺激的圖形建模方式。這是通過定義係統可能處於的狀態及係統如何從一種狀態移至另一種狀態 (在狀態之間過渡) 來完成的。事件驅動係統 (譬如 Qt 應用程序) 的關鍵特徵:行為經常不僅取決於最後或當前事件,且還取決於它之前的事件。使用狀態圖錶,錶達這種信息很容易。

Qt SCXML 緊密集成於 Qt 元對象係統;例如,狀態之間的過渡可以通過信號觸發,且狀態可以配置以設置特性和援引方法在 QObjects 。Qt 事件係統用於驅動狀態機。

Qt SCXML 狀態圖形是分層的。狀態可以嵌套在其它狀態中,且狀態機的當前配置由目前活動狀態集組成。

數據模型

Qt SCXML 支持 null 數據模型 (必須由符閤 SCXML 處理器所支持) 和 ECMAScript 數據模。此外,Qt SCXML 提供自己的 C++ 數據模型,實現通過 QScxmlCppDataModel 類。類使能夠編寫 C++ 代碼為 expr 屬性和 <script> 元素。 數據部分 的數據模型後援是子類化的 QScxmlCppDataModel ,為此 Qt SCXML 編譯器將生成調度方法。

Qt SCXML 編譯器

Qt SCXML 編譯器 qscxmlc ,讀取 .scxml 文件並産生 C++ 源和頭文件,包含 SCXML 定義狀態機的實現類。有關使用編譯器的更多信息,見 使用 Qt SCXML 編譯器 (qscxmlc) .

動態創建狀態機和編譯狀態機兩者行為方式相同,擁有相同特性、狀態、數據模型等。它們僅實例化方式有所不同。更多信息,見 實例化狀態機 and Qt SCXML 範例 .

日誌類彆

Qt SCXML 模塊導齣以下日誌類彆:

日誌類彆 描述
qscxmlLog 啓用 Qt SCXML 模塊日誌
scxmlLog 啓用 SCXML 文檔日誌