国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種組態(tài)控件技術(shù)在電力監(jiān)控系統(tǒng)中的運(yùn)用

2022-01-07 12:52
電視技術(shù) 2021年11期
關(guān)鍵詞:圖元控件視圖

陳 誠

(江蘇斯菲爾電氣股份有限公司,江蘇 江陰 214400)

0 引言

目前市面上多數(shù)電力監(jiān)控軟件都提供了豐富的基礎(chǔ)圖元和符合電力系統(tǒng)符號標(biāo)準(zhǔn)的電氣圖元供現(xiàn)場施工人員繪制電力監(jiān)控系統(tǒng)組態(tài)圖,但是在非電氣類復(fù)雜圖元的提供上各有特色,操作方式和繪制復(fù)雜程度也各不相同。電力監(jiān)控軟件中,除高低壓一次系統(tǒng)圖包含大量電氣圖元外,更多的顯示界面需要非電氣類復(fù)雜圖元來顯示現(xiàn)場的設(shè)備運(yùn)行情況,用于給運(yùn)維人員提示,使其能夠更好地查看了解現(xiàn)場系統(tǒng)運(yùn)行狀態(tài)。因此非電氣類圖元實(shí)現(xiàn)的好壞、操作的難易程度,對提升公司電力監(jiān)控軟件產(chǎn)品的競爭力有很大幫助。

Qt 作為源碼級跨平臺(tái)C++圖形用戶界面應(yīng)用程序開發(fā)框架,被很多企業(yè)用于開發(fā)GUI 程序。其包含的GraphicsView 框架[1]結(jié)構(gòu)主要包含視圖類、場景類及圖元類這3 個(gè)類,圖形視圖框架實(shí)現(xiàn)了模型-視圖結(jié)構(gòu)的圖形管理,能對大量圖元進(jìn)行管理,支持碰撞檢測,具有坐標(biāo)變換、圖元組合解組等多種方便的功能。其中,圖形視圖框架的QGraphicsProxyWidget 類為嵌入任何組件到場景提供了無縫支持,可嵌入簡單的組件、復(fù)雜圖元甚至是窗口。

采用Qt 圖形視圖框架的QGraphicsProxyWidget類可以深度整合電力監(jiān)控軟件中圖元或控件特性,將多個(gè)圖元、控件甚至是窗口組合成一個(gè)新的圖元提供給用戶使用[2]。這樣可以很大程度上簡化繪制組態(tài)圖形的難度和步驟,降低用戶的入門門檻,加快電力監(jiān)控項(xiàng)目的實(shí)施。

1 窗口圖元類

Qt 作為源碼級跨平臺(tái)的圖形用戶界面開發(fā)框架,非常適合有跨平臺(tái)需求的電力監(jiān)控軟件開發(fā),其QGraphicsProxyWidget 類是繼承圖元基類QGraphicsItem 的,而圖元基類是抽象類,因此在子類中必須實(shí)現(xiàn)下面兩個(gè)虛函數(shù)才能使用。

(1)boundingRect 函數(shù)。返回繪制圖元的矩形邊界,當(dāng)需要圖元接收到的操作事件時(shí),這些事件只能發(fā)生在這個(gè)返回的矩形區(qū)域當(dāng)中才會(huì)被接收到。

(2)paint 函數(shù)。使用QPainter 類繪制項(xiàng)目中一個(gè)具體的圖元的內(nèi)容。

將電力監(jiān)控的軟件組態(tài)圖元分為基礎(chǔ)圖元、電氣圖元及窗口圖元,它們關(guān)聯(lián)的數(shù)據(jù)和表現(xiàn)形式不同,因此組態(tài)圖元在程序設(shè)計(jì)時(shí)被分為兩大類?;A(chǔ)圖元和電氣圖元以QGraphicsItem 為父類,圖元內(nèi)容簡單,以繪制基礎(chǔ)圖形和符合標(biāo)準(zhǔn)電氣符號的電氣圖形為主。窗口圖元?jiǎng)t以QGraphicsProxyWidget為父類,圖元內(nèi)容復(fù)雜,可以包含Qt 提供的窗口控件或自定義復(fù)雜窗口。兩類圖元繪制的方式、操作方式是一致的,為了函數(shù)復(fù)用、簡化編程、保證程序結(jié)構(gòu)清晰,采用模板類。程序?qū)崿F(xiàn)如下。

模板類沒有實(shí)例化boundingRect 函數(shù)和paint函數(shù),模板類還是純虛類。其包含了兩類圖元的共有屬性和方法,其中方法中定義多個(gè)虛函數(shù),以方便子類重載實(shí)現(xiàn)多態(tài)性。

父類窗口圖元繼承于模板類,作為所有具有實(shí)際功能的子窗口圖元的父類,其類型為QGraphicsProxyWidget 類,并包含所有窗口圖元的公共屬性和方法。

父類窗口圖元實(shí)例化boundingRect 函數(shù)和paint 函數(shù),其中boundingRect 函數(shù)返回繪制窗口的矩形范圍,該矩形由圖元保存記錄。paint 函數(shù)必須實(shí)時(shí)計(jì)算當(dāng)前窗口的尺寸,否則整個(gè)窗口圖元不響應(yīng)操作,只會(huì)呈現(xiàn)為默認(rèn)大小狀態(tài)[3]。具體實(shí)現(xiàn)如下所示:首先通過subWidgetRect 函數(shù)獲取窗口圖元的子窗口的大小,獲取子窗口矩形后通過bottomRight 函數(shù)計(jì)算出右下角點(diǎn)的位置,如果當(dāng)前窗口圖元的子窗口的大小與窗口圖元記錄的矩形大小相比較超出設(shè)定的像素門檻,則重新計(jì)算子窗口的大小;其次,將其通過mapRectToScene 函數(shù)轉(zhuǎn)換到場景類的坐標(biāo)系中;最后通過setGeometry 函數(shù)重新設(shè)置窗口圖元幾何形狀。這樣就可以實(shí)現(xiàn)窗口圖元保持用戶拉伸操作后需要的大小。具體程序?qū)崿F(xiàn)如下。

窗口圖元同樣需要對點(diǎn)擊、移動(dòng)、釋放、雙擊等事件函數(shù)進(jìn)行重載,否則圖元將不會(huì)響應(yīng)鼠標(biāo)在場景中的操作事件。需要實(shí)現(xiàn)的函數(shù)如下:

因?yàn)镼GraphicsProxyWidget 類最終繼承于QGraphicsItem 類,所以事件重載函數(shù)需要調(diào)用QGraphicsItem 類對應(yīng)的默認(rèn)事件函數(shù),否則窗口圖元同樣不會(huì)響應(yīng)對應(yīng)的事件操作。例如釋放事件函數(shù)中最后需要加上下面的函數(shù):

窗口圖元在圖片組態(tài)軟件中繪制時(shí)的情況如圖1 所示。從控件欄中選取需要的窗口控件,放置、拖拽拉伸后即可顯示出相應(yīng)圖元的內(nèi)容。窗口圖元上有8 個(gè)方向控制方框,點(diǎn)擊選中后按著鼠標(biāo)可以向?qū)?yīng)的方向拉伸,直到拖拽到需要的大小,同時(shí)最右側(cè)的屬性欄會(huì)實(shí)時(shí)顯示出當(dāng)前窗口圖元的最新大小、坐標(biāo)、角度等信息。

圖1 窗口圖元繪制

2 子圖元窗口

父類窗口圖元實(shí)現(xiàn)了圖元的操作響應(yīng)和幾何形狀計(jì)算,具體的樣式和功能則需要通過繼承的子類來實(shí)現(xiàn)。子類窗口圖元有兩種實(shí)現(xiàn)方式,一種是直接使用Qt 默認(rèn)提供的一系列窗口控件,另一種是自己實(shí)現(xiàn)新的窗口控件。

Qt 提供了豐富的窗口控件,但是想直接在場景中調(diào)用顯示Qt 的窗口控件是無法實(shí)現(xiàn)的,而通過窗口圖元?jiǎng)t可以直接使用Qt 提供的窗口控件,并且對應(yīng)的窗口圖元將具備控件本身的屬性和相關(guān)操作,大大簡化了編程工作量[4]。以創(chuàng)建按鈕窗口圖元為例,在構(gòu)造函數(shù)中新建按鈕控件,然后調(diào)用setWidget 函數(shù)將按鈕控件嵌入,則繪制時(shí)對應(yīng)的窗口圖元就顯示為按鈕,此時(shí)操作按鈕窗口圖元就和正常使用Qt 提供的按鈕控件沒有區(qū)別,具有控件所擁有的操作和屬性。

窗口默認(rèn)情況下是提供邊框和標(biāo)題欄的,這樣窗口圖元看起來更像一個(gè)單獨(dú)的窗口,為了讓窗口圖元呈現(xiàn)為與電氣圖元一樣的外框以方便統(tǒng)一操作,需要將窗口圖元的屬性設(shè)置為Qt::FramelessWindowHint 無 邊 框 窗 口,通 過setWindowFlags 函數(shù)進(jìn)行設(shè)置。

Qt 提供的控件只能實(shí)現(xiàn)一些基礎(chǔ)的窗口功能,如果想實(shí)現(xiàn)更復(fù)雜的窗口則需要自己編寫新控件并嵌入到窗口圖元。如果有需要,甚至可以將完整的窗口嵌入到窗口圖元中以作為單一圖元提供。如圖1 所示,事件窗口圖元包含了按鈕、下拉框、表格等等控件,這里是將整個(gè)事件窗口包含在一個(gè)圖元中。在繪制事件窗口時(shí)可以直接調(diào)用,無需施工人員再自己組合。同時(shí),如果復(fù)雜控件中包含需要實(shí)時(shí)刷新的數(shù)據(jù)就必須重載paint 函數(shù),并在函數(shù)中實(shí)現(xiàn)數(shù)據(jù)刷新函數(shù),否則窗口圖元是不會(huì)實(shí)時(shí)刷新控件上的內(nèi)容的。

主要由窗口圖元繪制的報(bào)表監(jiān)控界面如圖2 所示,界面中時(shí)間對話框、單選框、按鈕都是直接使用Qt 提供的控件構(gòu)成的窗口圖元,它們可以使用控件本身的屬性來實(shí)現(xiàn)各種操作[5]。表格是自定義的報(bào)表窗口圖元,可以設(shè)置表格的樣式并且自動(dòng)地實(shí)時(shí)刷新報(bào)表中的數(shù)據(jù)。

圖2 窗口控件組成的界面

3 結(jié)語

本文方法最終應(yīng)用在江蘇斯菲爾電氣股份有限公司新開發(fā)的電力監(jiān)控軟件中,實(shí)現(xiàn)了圖片組態(tài)軟件中窗口圖元的設(shè)計(jì)、編程及應(yīng)用。該方法提供了大量復(fù)雜圖元和控件,這些圖元和控件為用戶提供了成熟的繪制方案,無需用戶自己組合拼接,降低了用戶的入門門檻,可以方便用戶快速掌握,減少培訓(xùn)成本,從而加快項(xiàng)目的實(shí)施,進(jìn)一步減少時(shí)間成本和人力成本。

猜你喜歡
圖元控件視圖
學(xué)術(shù)出版物插圖的編排要求(一):圖注
聯(lián)鎖表自動(dòng)生成軟件的設(shè)計(jì)與實(shí)現(xiàn)
關(guān)于.net控件數(shù)組的探討
5.3 視圖與投影
視圖
Y—20重型運(yùn)輸機(jī)多視圖
SA2型76毫米車載高炮多視圖
基于Qt繪圖系統(tǒng)的圖形應(yīng)用優(yōu)化研究與實(shí)現(xiàn)
ASP.NET服務(wù)器端驗(yàn)證控件的使用
數(shù)控車床的工藝與編程