两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種基于Qt的自定義控件的使用方法

文檔序號(hào):6383975閱讀:4269來(lái)源:國(guó)知局
專利名稱:一種基于Qt的自定義控件的使用方法
技術(shù)領(lǐng)域
本發(fā)明涉及Qt的圖形界面開(kāi)發(fā)方法,尤其是一種應(yīng)用在嵌入式領(lǐng)域的Qt圖形界面開(kāi)發(fā)方法。
背景技術(shù)
在嵌入式領(lǐng)域中,以VxWorks為例,在保證系統(tǒng)實(shí)時(shí)性的前提下,功能更為強(qiáng)大的人性化界面設(shè)計(jì)要求越來(lái)越高。目前在VxWorks下多采用其內(nèi)嵌的WindML圖形庫(kù)組件進(jìn)行開(kāi)發(fā),該組件對(duì)窗口、控件等圖形開(kāi)發(fā)功能較弱。Qt相比WindML等其他圖像開(kāi)發(fā)庫(kù),具有支持多平臺(tái)、代碼可移植性強(qiáng)、圖形庫(kù)功能豐富等優(yōu)點(diǎn)。采用VxWorks和Qt相結(jié)合的形式可以作為嵌入式圖形界面開(kāi)發(fā)的一個(gè)解決方案。Qt提供了豐富的類庫(kù),對(duì)于采用系統(tǒng)默認(rèn)風(fēng)格的界面開(kāi)發(fā)已經(jīng)夠用。如果直接繼承Qt基本類庫(kù),同時(shí)直接對(duì)繼承后的子類進(jìn)行設(shè)置和引用,盡管最終可以實(shí)現(xiàn)界面設(shè)計(jì)要求,但會(huì)導(dǎo)致在應(yīng)用程序中對(duì)相同類別派生出的多個(gè)對(duì)象進(jìn)行多次重復(fù)設(shè)置。這樣會(huì)降低代碼的可讀性、增加了各模塊間的耦合度,不利于軟件的維護(hù)。另外,目前廣泛使用的可視化開(kāi)發(fā)工具Qt Designer在控件樣式設(shè)置、位置布局等方面顯得不夠靈活,同時(shí)利用它不能夠在程序運(yùn)行時(shí)動(dòng)態(tài)的生成控件。

發(fā)明內(nèi)容
本發(fā)明旨在解決目前Qt開(kāi)發(fā)過(guò)程中存在的模塊耦合度高、代碼可讀性差等問(wèn)題,本發(fā)明提供了一種基于Qt的自定義控件的使用方法,其包括以下步驟
基于Qt基本類庫(kù)中的類作為父類派生出自定義控件類,所述自定義控件類重載所述父類成員函數(shù)或新建新構(gòu)造函數(shù)實(shí)現(xiàn)對(duì)自身的封裝;
自定義控件類作為自定義控件使用時(shí),為所述自定義控件類分配空間并調(diào)用所述重載的父類成員函數(shù)或構(gòu)造函數(shù)。較佳地,一個(gè)Qt圖形界面包括多個(gè)自定義控件類,所述多個(gè)自定義控件類相互獨(dú)立并能配合使用。較佳地,所述的封裝包括對(duì)樣式、功能、事件的封裝。本發(fā)明的有益效果
使用基于Qt的圖形界面的自定義控件開(kāi)發(fā),能夠有效降低軟件模塊間的耦合度,同時(shí)使程序代碼變得簡(jiǎn)潔,從而易于維護(hù);另外,還能夠動(dòng)態(tài)的對(duì)控件進(jìn)行操作。


結(jié)合附圖,通過(guò)下文的述詳細(xì)說(shuō)明,可更清楚地理解本發(fā)明的上述及其他特征和優(yōu)點(diǎn),其中
圖1示出了本發(fā)明的流程 圖2為實(shí)現(xiàn)本發(fā)明實(shí)施例I的流程 圖3為實(shí)現(xiàn)本發(fā)明實(shí)施例2的流程 圖4為實(shí)現(xiàn)本發(fā)明實(shí)施例3的流程圖。
具體實(shí)施例方式參見(jiàn)示出本發(fā)明實(shí)施例的附圖,下文將更詳細(xì)地描述本發(fā)明。然而,本發(fā)明可以以許多不同形式實(shí)現(xiàn),并且不應(yīng)解釋為受在此提出之實(shí)施例的限制。相反,提出這些實(shí)施例是 為了達(dá)成充分及完整公開(kāi),并且使本技術(shù)領(lǐng)域的技術(shù)人員完全了解本發(fā)明的范圍。這些附圖中,為清楚起見(jiàn),可能放大了層及區(qū)域的尺寸及相對(duì)尺寸。如圖1所示,本發(fā)明提供了一種基于Qt的自定義控件的使用方法,其過(guò)程為 基于Qt基本類庫(kù)中的類作為父類派生出自定義控件類,所述自定義控件類重載所述
父類成員函數(shù)或新建新構(gòu)造函數(shù)實(shí)現(xiàn)對(duì)自身的封裝;
自定義控件類作為自定義控件使用時(shí),為所述自定義控件類分配空間并調(diào)用所述重載的父類成員函數(shù)或構(gòu)造函數(shù)。一個(gè)Qt圖形界面上可以生成多個(gè)自定義控件類,各個(gè)自定義控件類相互獨(dú)立,本實(shí)施例中分別對(duì)各個(gè)自定義控件類獨(dú)立設(shè)置其樣式、功能事件等,各自定義控件類相互配合使用。實(shí)施例I
圖2所示的實(shí)施例I中,設(shè)計(jì)并應(yīng)用了自定義Label控件。其具體過(guò)程為
使用Qt自帶的Qlabel類作為父類派生出label_widget類作為自定義Label控件,其構(gòu)造函數(shù)聲明如下
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);
此構(gòu)造函數(shù)完成的功能有使用Qt自帶的QLabel類設(shè)置Label控件背景色,Label底色和邊框顏色一起改變,為達(dá)到邊框立體的效果,利用兩個(gè)Label來(lái)實(shí)現(xiàn);底層Label用來(lái)保持邊框樣式,頂層Label用來(lái)設(shè)置背景色和文字顏色。Qt要求類的構(gòu)造函數(shù)在聲明時(shí)其參數(shù)強(qiáng)制賦初值,因此可以用最常用的樣式來(lái)設(shè)置參數(shù)初值,此處采用黑底白字作為缺省顏色。另外還可以重載QLabel類的虛函數(shù)setColorO、setText O來(lái)對(duì)頂層Label的顏色、文字進(jìn)行設(shè)置,以便在程序中動(dòng)態(tài)設(shè)置label_widget類對(duì)象的樣式。使用自定義label_widget類,只需要調(diào)用一條構(gòu)造函數(shù)語(yǔ)句就可以在屏幕指定位置生成所需樣式的Label控件,例如下面的缺省調(diào)用。label_widget* label = new label_widget(NULL, 300,300,200,100,tr("Label控件測(cè)試〃),tr(〃宋體〃),9)。實(shí)施例2圖3所示的實(shí)施例2中,設(shè)計(jì)并應(yīng)用了自定義動(dòng)態(tài)控件。除了位置固定的顯示界面外,有時(shí)還存在動(dòng)態(tài)的信息顯示需求,例如在雷達(dá)PPI顯示畫面中的目標(biāo)信息。以往多采用繪圖的方式來(lái)繪制動(dòng)態(tài)信息,可使用異或、貼圖重畫、全屏刷新等方法來(lái)實(shí)現(xiàn)。缺點(diǎn)是軟件編程條件判斷分支多、處理繁瑣且容易出現(xiàn)畫面閃爍。利用Qt,通過(guò)自定義控件類實(shí)現(xiàn)動(dòng)態(tài)控件,可以很好的對(duì)動(dòng)態(tài)信息進(jìn)行顯示,不受其他窗口遮擋影響且無(wú)需重繪,并徹底解決之前方法所帶來(lái)的問(wèn)題。為實(shí)現(xiàn)PPI顯目標(biāo)控件,基于QWidget生成moving_widget類,為其構(gòu)造函數(shù)添加一個(gè)參數(shù)type,用于指定繪制的目標(biāo)類型。構(gòu)造函數(shù)定義如下
moving_widget: :moving_widget(Qffidget ^parent, qu i nt8 type) :Qffidget(parent)
{
resize (80, 40) ; //控件尺寸 t_type = type; //初始化目標(biāo)類型(1:飛機(jī)2 :導(dǎo)彈3 :直升機(jī))
}
在moving_widget類中重載成員函數(shù)paintEvent (), 通過(guò)QPainter類實(shí)現(xiàn)對(duì)各種目標(biāo)圖符、批號(hào)的繪制,其中飛機(jī),導(dǎo)彈:^001,直升機(jī)^ 2。在需要顯示目標(biāo)的P顯窗口控件中創(chuàng)建目標(biāo),并在指定方位、距離上顯示該目標(biāo)圖符和批號(hào),創(chuàng)建、顯示目標(biāo)的代碼如下moving_widget* target = new moving_widget(this, I);
PPI_ffidget::target_draw(target, a, r, 6001);
其中,target_draw是自定義P顯窗口控件PPI_Widget的私有成員函數(shù),可根據(jù)目標(biāo)方位、距離、批號(hào)信息在P顯相應(yīng)位置繪制該目標(biāo)。當(dāng)目標(biāo)參數(shù)發(fā)生變化時(shí),可通過(guò)target->move (x, y)直接移動(dòng)該動(dòng)目標(biāo)控件,而無(wú)需在新位置上進(jìn)行重繪和抹去舊目標(biāo)。實(shí)施例3
在圖4所示的實(shí)施例3中,設(shè)計(jì)并應(yīng)用了含有多個(gè)子控件的自定義控件。在Qt開(kāi)發(fā)中,經(jīng)常會(huì)在主界面上疊加子窗口,有時(shí)需要對(duì)無(wú)標(biāo)題欄的子窗口實(shí)現(xiàn)鼠標(biāo)拖曳功能,同時(shí)又不會(huì)影響主界面及其他子窗口??梢酝ㄟ^(guò)自定義控件來(lái)實(shí)現(xiàn)該子窗口,在自定義控件類中重載QWidget的成員函數(shù)mouseMoveEvent O、mousePressEvent O ,通過(guò)返回的QMouseEvent事件類型來(lái)獲取控件位移量,再通過(guò)QWidget: :move O移動(dòng)控件,就可以實(shí)現(xiàn)鼠標(biāo)對(duì)該子窗口的拖曳處理。如果窗口由多個(gè)子控件組成,每個(gè)子控件都需要對(duì)鼠標(biāo)按下事件進(jìn)行響應(yīng)。假如對(duì)每個(gè)子控件都重載QWidget的mousePressEvent O ,顯然代碼重復(fù)率高,同時(shí)增加了模塊間的耦合度。這時(shí)可以通過(guò)自定義控件來(lái)實(shí)現(xiàn)該窗口,在自定義控件類中使用事件過(guò)濾器eventFilterO來(lái)對(duì)子控件的事件進(jìn)行統(tǒng)一處理。以雷達(dá)PPI顯量程設(shè)置窗口為例,它由多個(gè)自定義label控件組成,其中有很多l(xiāng)abel控件都需要響應(yīng)鼠標(biāo)按鍵事件。利用自定義控件生成該窗口,在自定義控件類中重載成員函數(shù) eventFilter O
eventFilter(QObject * obj, QEvent * event)
{if (obj == label_12)
if (eventtype() == QEvent::MouseButtonPress)
label_12->setColor(Qt::white, Qt::black);
}
eventFilter ()主要由兩個(gè)參數(shù)組成,首先通過(guò)obj參數(shù)判斷是哪個(gè)子控件需要響應(yīng)事件,再根據(jù)event參數(shù)確定是哪類事件類型,之后便可對(duì)需要響應(yīng)該事件類型的label控件進(jìn)行顏色設(shè)置。
使用基于Qt的圖形界面的自定義控件開(kāi)發(fā),能夠有效降低軟件模塊間的耦合度,同時(shí)使程序代碼變得簡(jiǎn)潔,從而易于維護(hù);另外,還能夠動(dòng)態(tài)的對(duì)控件進(jìn)行操作。因本技術(shù)領(lǐng)域的技術(shù)人員應(yīng)理解,本發(fā)明可以以許多其他具體形式實(shí)現(xiàn)而不脫離本發(fā)明的精神或范圍。盡管業(yè)已描述了本發(fā)明的實(shí)施例,應(yīng)理解本發(fā)明不應(yīng)限制為這些實(shí)施例,本技術(shù)領(lǐng)域的技術(shù)人員可如所附權(quán)利要求書界定的本發(fā)明精神和范圍之內(nèi)作出變化和修改。
權(quán)利要求
1.一種基于Qt的自定義控件的使用方法,其特征在于,包括以下過(guò)程基于Qt基本類庫(kù)中的類作為父類派生出自定義控件類,所述自定義控件類重載所述父類成員函數(shù)或新建構(gòu)造函數(shù)實(shí)現(xiàn)對(duì)自身的封裝;自定義控件類作為自定義控件使用時(shí),為所述自定義控件類分配空間并調(diào)用所述重載的父類成員函數(shù)或構(gòu)造函數(shù)。
2.如權(quán)利要求I所述的基于Qt的自定義控件的使用方法,其特征在于,一個(gè)Qt圖形界面包括多個(gè)自定義控件類,所述多個(gè)自定義控件類相互獨(dú)立并配合使 用。
3.如權(quán)利要求I所述的基于Qt的自定義控件的使用方法,其特征在于,所述的封裝包括對(duì)樣式、功能、事件中的一種或其組合的封裝。
全文摘要
本發(fā)明提供了一種基于Qt的自定義控件的使用方法,其過(guò)程為基于Qt基本類庫(kù)中的類作為父類派生出自定義控件類,所述自定義控件類重載所述父類成員函數(shù)或新建新構(gòu)造函數(shù)實(shí)現(xiàn)對(duì)自身的封裝;自定義控件類作為自定義控件使用時(shí),為所述自定義控件類分配空間并調(diào)用所述重載的父類成員函數(shù)或構(gòu)造函數(shù);其中一個(gè)Qt圖形界面可以包括多個(gè)獨(dú)立的自定義控件類配合使用。本發(fā)明使用基于Qt的圖形界面的自定義控件開(kāi)發(fā),能夠有效降低軟件模塊間的耦合度,同時(shí)使程序代碼變得簡(jiǎn)潔,從而易于維護(hù);另外,還能夠動(dòng)態(tài)的對(duì)控件進(jìn)行操作。
文檔編號(hào)G06F9/44GK102981861SQ20121053459
公開(kāi)日2013年3月20日 申請(qǐng)日期2012年12月12日 優(yōu)先權(quán)日2012年12月12日
發(fā)明者高宇, 史云鵬, 施連燈 申請(qǐng)人:上海航天測(cè)控通信研究所
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
成安县| 疏附县| 拜泉县| 武胜县| 荣成市| 霍州市| 中阳县| 偃师市| 绥化市| 江陵县| 精河县| 洛隆县| 邯郸市| 邵阳市| 波密县| 来安县| 富阳市| 南宫市| 岑巩县| 沂源县| 延庆县| 中卫市| 湖口县| 彩票| 邳州市| 达州市| 孙吴县| 定远县| 小金县| 姜堰市| 丹棱县| 华安县| 尼玛县| 大宁县| 舟山市| 得荣县| 宁城县| 河北区| 霍州市| 安仁县| 桦南县|