本發明專利技術提供了一種基于Qt的自定義控件的使用方法,其過程為:基于Qt基本類庫中的類作為父類派生出自定義控件類,所述自定義控件類重載所述父類成員函數或新建新構造函數實現對自身的封裝;自定義控件類作為自定義控件使用時,為所述自定義控件類分配空間并調用所述重載的父類成員函數或構造函數;其中一個Qt圖形界面可以包括多個獨立的自定義控件類配合使用。本發明專利技術使用基于Qt的圖形界面的自定義控件開發,能夠有效降低軟件模塊間的耦合度,同時使程序代碼變得簡潔,從而易于維護;另外,還能夠動態的對控件進行操作。
【技術實現步驟摘要】
本專利技術涉及Qt的圖形界面開發方法,尤其是一種應用在嵌入式領域的Qt圖形界面開發方法。
技術介紹
在嵌入式領域中,以VxWorks為例,在保證系統實時性的前提下,功能更為強大的人性化界面設計要求越來越高。目前在VxWorks下多采用其內嵌的WindML圖形庫組件進行開發,該組件對窗口、控件等圖形開發功能較弱。Qt相比WindML等其他圖像開發庫,具有支持多平臺、代碼可移植性強、圖形庫功能豐富等優點。采用VxWorks和Qt相結合的形式可以作為嵌入式圖形界面開發的一個解決方案。Qt提供了豐富的類庫,對于采用系統默認風格的界面開發已經夠用。如果直接繼承Qt基本類庫,同時直接對繼承后的子類進行設置和引用,盡管最終可以實現界面設計要求,但會導致在應用程序中對相同類別派生出的多個對象進行多次重復設置。這樣會降低代碼的可讀性、增加了各模塊間的耦合度,不利于軟件的維護。另外,目前廣泛使用的可視化開發工具Qt Designer在控件樣式設置、位置布局等方面顯得不夠靈活,同時利用它不能夠在程序運行時動態的生成控件。
技術實現思路
本專利技術旨在解決目前Qt開發過程中存在的模塊耦合度高、代碼可讀性差等問題,本專利技術提供了,其包括以下步驟 基于Qt基本類庫中的類作為父類派生出自定義控件類,所述自定義控件類重載所述父類成員函數或新建新構造函數實現對自身的封裝; 自定義控件類作為自定義控件使用時,為所述自定義控件類分配空間并調用所述重載的父類成員函數或構造函數。較佳地,一個Qt圖形界面包括多個自定義控件類,所述多個自定義控件類相互獨立并能配合使用。較佳地,所述的封裝包括對樣式、功能、事件的封裝。本專利技術的有益效果 使用基于Qt的圖形界面的自定義控件開發,能夠有效降低軟件模塊間的耦合度,同時使程序代碼變得簡潔,從而易于維護;另外,還能夠動態的對控件進行操作。附圖說明結合附圖,通過下文的述詳細說明,可更清楚地理解本專利技術的上述及其他特征和優點,其中 圖1示出了本專利技術的流程 圖2為實現本專利技術實施例I的流程 圖3為實現本專利技術實施例2的流程 圖4為實現本專利技術實施例3的流程圖。具體實施例方式參見示出本專利技術實施例的附圖,下文將更詳細地描述本專利技術。然而,本專利技術可以以許多不同形式實現,并且不應解釋為受在此提出之實施例的限制。相反,提出這些實施例是 為了達成充分及完整公開,并且使本
的技術人員完全了解本專利技術的范圍。這些附圖中,為清楚起見,可能放大了層及區域的尺寸及相對尺寸。如圖1所示,本專利技術提供了,其過程為 基于Qt基本類庫中的類作為父類派生出自定義控件類,所述自定義控件類重載所述父類成員函數或新建新構造函數實現對自身的封裝; 自定義控件類作為自定義控件使用時,為所述自定義控件類分配空間并調用所述重載的父類成員函數或構造函數。一個Qt圖形界面上可以生成多個自定義控件類,各個自定義控件類相互獨立,本實施例中分別對各個自定義控件類獨立設置其樣式、功能事件等,各自定義控件類相互配合使用。實施例I 圖2所示的實施例I中,設計并應用了自定義Label控件。其具體過程為 使用Qt自帶的Qlabel類作為父類派生出label_widget類作為自定義Label控件,其構造函數聲明如下label_widget(Qffidget 氺parent = O, quintl6 x = 10, quintl6 y = 10, quintl6 w=10, quintl6 h = 10, QString lbl_text = tr(""),QString lbl_font = tr("宋體"),quint8 lbl_size = 12, bool changeble = false, QColor color—back = Qt::black,QColor color_fore = Qt::white, bool frame = true); 此構造函數完成的功能有使用Qt自帶的QLabel類設置Label控件背景色,Label底色和邊框顏色一起改變,為達到邊框立體的效果,利用兩個Label來實現;底層Label用來保持邊框樣式,頂層Label用來設置背景色和文字顏色。Qt要求類的構造函數在聲明時其參數強制賦初值,因此可以用最常用的樣式來設置參數初值,此處采用黑底白字作為缺省顏色。另外還可以重載QLabel類的虛函數setColorO、setText O來對頂層Label的顏色、文字進行設置,以便在程序中動態設置label_widget類對象的樣式。使用自定義label_widget類,只需要調用一條構造函數語句就可以在屏幕指定位置生成所需樣式的Label控件,例如下面的缺省調用。label_widget* label = new label_widget(NULL, 300,300,200,100,tr("Label控件測試〃),tr(〃宋體〃),9)。實施例2圖3所示的實施例2中,設計并應用了自定義動態控件。除了位置固定的顯示界面外,有時還存在動態的信息顯示需求,例如在雷達PPI顯示畫面中的目標信息。以往多采用繪圖的方式來繪制動態信息,可使用異或、貼圖重畫、全屏刷新等方法來實現。缺點是軟件編程條件判斷分支多、處理繁瑣且容易出現畫面閃爍。利用Qt,通過自定義控件類實現動態控件,可以很好的對動態信息進行顯示,不受其他窗口遮擋影響且無需重繪,并徹底解決之前方法所帶來的問題。為實現PPI顯目標控件,基于QWidget生成moving_widget類,為其構造函數添加一個參數type,用于指定繪制的目標類型。構造函數定義如下 moving_widget: :moving_widget(Qffidget ^parent, qu i nt8 type) :Qffidget(parent){ resize (80, 40) ; //控件尺寸 t_type = type; //初始化目標類型(1:飛機2 :導彈3 :直升機)} 在moving_widget類中重載成員函數paintEvent (), 通過QPainter類實現對各種目標圖符、批號的繪制,其中飛機,導彈:^001,直升機^ 2。在需要顯示目標的P顯窗口控件中創建目標,并在指定方位、距離上顯示該目標圖符和批號,創建、顯示目標的代碼如下moving_widget* target = new moving_widget(this, I);PPI_ffidget::target_draw(target, a, r, 6001); 其中,target_draw是自定義P顯窗口控件PPI_Widget的私有成員函數,可根據目標方位、距離、批號信息在P顯相應位置繪制該目標。當目標參數發生變化時,可通過target->move (x, y)直接移動該動目標控件,而無需在新位置上進行重繪和抹去舊目標。實施例3 在圖4所示的實施例3中,設計并應用了含有多個子控件的自定義控件。在Qt開發中,經常會在主界面上疊加子窗口,有時需要對無標題欄的子窗口實現鼠標拖曳功能,同時又不會影響主界面及其他子窗口。可以通過自定義控件來實現該子窗口,在自定義控件類中重載QWidget的成員函數mouseMoveEve本文檔來自技高網...
【技術保護點】
一種基于Qt的自定義控件的使用方法,其特征在于,包括以下過程:基于Qt基本類庫中的類作為父類派生出自定義控件類,所述自定義控件類重載所述父類成員函數或新建構造函數實現對自身的封裝;自定義控件類作為自定義控件使用時,為所述自定義控件類分配空間并調用所述重載的父類成員函數或構造函數。
【技術特征摘要】
【專利技術屬性】
技術研發人員:高宇,史云鵬,施連燈,
申請(專利權)人:上海航天測控通信研究所,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。