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