于凱華 李華龍
摘要:本文簡述了利用QtDesigner插件機制二次開發簡易組態工具,顯示自定義控件及配置控件屬性,完成控件顯示及屬性配置界面。
關鍵詞:Qt;Designer;插件開發
中圖分類號:TP271 文獻標識碼:A
文章編號:1009-3044(2019)12-0293-02
為了快速開發一款簡易組態工具,完成嵌入式儀器設備操作界面組態控制功能,采用基于Qt開發的一款交互式可視化GUI設計開源軟件工具Designer,并根據項目需求,對其控件功能進行二次開發。
采用Qt Designer作為二次開發的工具,主要是因為Qt是一個跨平臺的開源C++圖形用戶界面應用程序開發框架,支持的操作系統包括: Microsoft Windows7,Linux,FreeBSD,BSD/OS等等。而且Qt 具有良好的封裝機制,其模塊化程度非常高,可重用性較好,還提供了豐富的API,對軟件開發來說非常方便。采用的Qt Designer版本是基于Qt4.7.4庫版本開發的。
1前言
Qt Designer基于插件的架構允許用戶自定義和第三方的自定義窗口控件進行編輯,包括控件屬性,控件動作等。但是Qt Designer本身是面向軟件開發人員進行功能界面設計及代碼開發的,并不適用于無軟件開發基礎的工程組態人員,因此進行二次開發,對其控件顯示及屬性配置進行了重新開發及封裝,實現簡易的組態軟件。工程人員利用該組態軟件進行控制邏輯設計及組態,并保存成二進制文件,用于嵌入式儀器設備加載顯示組態界面并進行邏輯操作。
插件二次開發是該組態軟件的重要部分,主要包括以下幾個方面。
2插件接口類實現
Qt Designer提供了插件接口類QDesignerCustomWidgetInterface及加載插件類的方法,為復用其插件加載機制,自定義設計的插件必須繼承于該接口類,保證軟件啟動后可以順利加載自定義開發的插件。接口類中的成員函數描述了部件暴露的各種屬性,其大多數是由基類中的純虛函數提供的。子類需重新實現的函數如下表所示:
3插件控件類實現
Qt Designer軟件中插件的控件類默認繼承于QWidget,其包含了眾多屬性項配置,而絕大多數并不適用于工程組態人員進行配置,工程人員更傾向于使用屬性項配置簡單的組態控件,能滿足工程顯示要求即可。因此對Qt Designer控件進行二次開發,設計繼承于QWidget的控件基類HmiWidget,并設計自定義屬性數據結構HmiProperty,用于存儲自定義控件的屬性項及屬性值。
HmiWidget控件基類主要實現以下功能:
基類HmiWidget中封裝自定義控件的基本屬性,包括控件坐標、長度、寬度、可見性、可用性、偏移位置等信息。繼承于該基類的子控件則實現自定義的屬性,以自定義按鈕控件為例,添加自定義屬性,包括按鈕文本、文本顏色、字體大小、安全級別等等。該設計方案易于擴展控件功能,提高代碼的復用性,避免代碼的重復開發工作;根據不同項目需求,快速完成控件開發。
自定義屬性數據結構HmiProerty用于存儲自定義控件的屬性類型及屬性值,Qt Designer插件加載時獲取控件屬性會強制轉換為QVariant數據結構,QVariant是Qt提供的通用數據類型,支持C++所有的標準數據類型,同樣支持自定義數據類型,為保證自定義數據類型HmiProperty可以被Qt Designer識別,可以通過Qt提供的宏Q_DECLARE_METATYPE()將HmiProperty注冊到QVariant中,保證屬性加載過程中可以識別自定義書記類型。
4自定義屬性加載
Qt Designer加載顯示控件屬性是通過QObject提供的屬性獲取接口函數,獲取控件的所有屬性,不僅包括控件本身的屬性項,同樣包括基類QWidget的屬性項。而實際組態過程中只需顯示工程人員需要配置的屬性項即可,因此對Qt Designer屬性加載過程中的屬性處理機制進行裁剪處理。主要包括兩個部分:
? 對自定義控件進行類型判定,Qt的元對象系統提供了實時類型信息獲取機制,這保證通過Qt提供的函數獲取創建的控件對象的實際對象類型。判斷控件類型是否是繼承于HmiWidget,若是,則證明該控件屬于組態工具要加載的對象,否則直接返回不予處理,避免加載Qt原生的控件對象。
? 自定義控件屬性項加載,同樣借助于Qt元對象系統,獲取自定義控件的屬性項,進行類型判斷,查看屬性項對象是否繼承于HmiProperty,若是,則添加到顯示屬性類表中,否則直接返回,不予處理。最終將控件顯示屬性列表中的屬性項加載到屬性配置窗口中進行顯示。
5結束語
自定義插件創建完成后,運行Qt Designer軟件,顯示控件窗口及屬性配置窗口如下圖所示。
基于Qt Designer插件機制二次開發的簡易組態軟件,滿足工程組態人員組態要求,將工程組態人員組態的畫面最終保存成二進制文件,下裝到嵌入式儀器控制系統中,界面顯示正常,操作動作正確執行,滿足工程要求。
【通聯編輯:梁書】