999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Linux Qt的列車顯示器表盤控件設計與實現

2021-09-10 07:22:44周忠洋
內燃機與配件 2021年4期

周忠洋

摘要:為提高開發(fā)效率,降低列車顯示器軟件開發(fā)成本,本文設計了一種基于Linux Qt平臺的顯示器表盤控件。在Qt4開發(fā)環(huán)境下,通過繼承QWidget類,將QLinearGradient類、QPainter類、QLabel類等結合,經過坐標變換及旋轉函數,重新實現paintEvent函數,實現此表盤控件。經過實際項目驗證,該控件類設計友好、個性化程度較高,豐富了傳統(tǒng)列車顯示界面。

Abstract: In order to improve the development efficiency and reduce the development cost of train display software, this paper designs a display dial control based on Linux Qt platform. In the Qt4 development environment, the QWidget class is inherited to combine the QLinearGradient class, QPainter class, QLabel class, etc. After coordinate transformation and rotation function, the paintEvent function is re-implemented to realize the dial control. Through the actual project verification, the control class is friendly in design, highly personalized, and enriches the traditional train display interface.

關鍵詞:Qt框架;表盤控件類;C++;Linux系統(tǒng);人機界面

0? 引言

列車人機界面(Human Machine Interface,HMI)在列車運行過程中向司機及維護人員提供列車的運行信息、列車各系統(tǒng)設備狀態(tài)信息及故障信息等,是列車網絡控制及監(jiān)控系統(tǒng)的重要組成部分[1]。伴隨著信息技術的飛速發(fā)展及軌道交通設備性能的提升,帶有觸摸屏控制的顯示器逐步取代了傳統(tǒng)的儀表顯示方式,其種類及功能也變得更加多樣化和豐富,操作上的方便靈活、顯示直觀的優(yōu)勢日益凸顯。

HMI系統(tǒng)以微機技術為核心,與數據處理技術、GUI等技術相結合,軟件開發(fā)復雜,專用性強,擴展性不強。本文設計的一種基于Linux Qt平臺的顯示器表盤控件,以嵌入式Linux內核2.6.x系統(tǒng)為軟件平臺,在此基礎上采用開源圖形界面庫Qt4.8.5、開發(fā)工具QtCreator2.8.0開發(fā)HMI界面控件類。該表盤控件類、引用方便,可靠性高、使顯示器界面程序開發(fā)模塊化,降低了系統(tǒng)開發(fā)復雜度及開發(fā)成本。

1? Qt框架介紹

Qt框架結構如圖1所示。

1.1 GUI庫

Qt本身是一個跨平臺的C++圖形用戶界面庫,為諾基亞旗下的編程語言工具[2]。隨著用戶的增加及發(fā)展,已經成為一種獨立的軟件開發(fā)平臺,包括Qt、基于Frame—Buffer的Qtopia Core、快速開發(fā)工具Qt Designer和國際化工具Qt Linguist等部分。Qt支持的系統(tǒng)有:Unix系統(tǒng)、Linux系統(tǒng)、WinNT/Win2k、Windows 95/98、Mac OS等平臺。Qt的C++類庫同Windows平臺上的MFC、OWL、VCL是同類型的。但Qt還具有下列優(yōu)點:

①支持跨平臺運行。

Qt支持下列操作系統(tǒng):Windows NT、Linux、Unix、Mac OS、HP—UX、FreeBSD等。

②豐富的API。

Qt包括多達250個以上的C++類,還提供了基于模板的collections、serialization、file、device、di—rectory management和date/time類,甚至還包括正則表達式的處理功能。

③面向對象的程序設計。

Qt具有良好封裝機制,這使得Qt的模塊化程度非常高,可重用性好,對于用戶開發(fā)方便、快捷。Qt使用一種信號/槽一(signals/slots)的機制,使得各個對象之間的協同工作變得十分簡單。

④支持2D/3D圖形渲染,支持OpenGL。

⑤大量的開發(fā)文檔。

1.2 Qt的信號槽機制

嵌入式Linux操作系統(tǒng)沿襲了Unix系統(tǒng)的架構,具有成熟、可靠、穩(wěn)定等特點;Linux是開源的操作系統(tǒng),因此任何系統(tǒng)的設計者均可以根據實際需求對其進行二次開發(fā),只保留相關操作系統(tǒng)功能,同時可根據實際應用的需要優(yōu)化操作系統(tǒng)的代碼,體系結構靈活,易于裁剪,免費使用等特點,使其成為嵌入式系統(tǒng)開發(fā)的重要工具[3]。

創(chuàng)建自定義的窗口部件方法有:

對一個已經存在的Qt窗口部件進行子類化;

將QWidget類與現有窗口部件類進行組合,重新實現虛函數;

子類化QWidget,并且通過重新實現一些用來繪制窗口部件及響應鼠標點擊的事件處理器;

由于Qt未提供表盤控件類,且無法通過Qt提供的控件組合實現,因此只能采用第三種方法即直接對QWidget進行子類化,然后通過QPainter在QWidget窗口部件上進行繪制此表盤控件,同時添加部件響應事件。另外,將自繪制好的表盤控件集成到Qt設計師中,這樣就可以像使用內置的Qt窗口部件一樣來使用了。

通過此種方法創(chuàng)建的表盤控件可實現跨平臺。

Qt的二維圖形引擎是基于QPainter類。QPainter既可以繪制幾何性狀如點、線、矩形、橢圓、弧形、弦形、餅形等,也可以繪制像素映射、圖像和文字。此外,QPainter還支持高級特性如反走樣、像素混合、漸變填充、矢量路徑等。

QPainter可以在“繪圖設備”上進行畫圖,如QWidget、QPixmap、QImage等。通過重新實現QWidget::paintEvent()函數,即可在窗口部件上隨心所欲的控制所要繪制的部件的外觀、形狀等。

1.3 坐標系介紹

Qt中每一個窗口都有一個坐標系,默認窗口左上角為坐標原點,然后水平向右依次增大,水平向左依次減小,垂直向下依次增大,垂直向上依次減小。原點即為(0,0)點,然后以像素為單位增減。

1.3.1 坐標系變換

坐標系變換是利用變換矩陣來進行的,可以利用QTransform類來設置變換矩陣,因為一般不需要進行更改,所以這里就不再涉及。下面只是對坐標系的平移、縮放、旋轉、扭曲等函數進行介紹。

利用函數void QPainter::translate(qreal dx,qreal dy)實現平移。

利用函數void QPainter::scale(qreal sx,qreal sy)實現縮放。

利用函數void QPainter::rotate(qreal angle)實現旋轉。

1.3.2 坐標系統(tǒng)的保護

平移函數、旋轉函數已經將坐標系進行了變換,所以需要將變換的坐標系再恢復,要用到兩個函數:

Void QPainter::save() 保存坐標系現在的狀態(tài);

Void QPainter::restore() 恢復以前的坐標系。

可以利用save()函數保存坐標系現在的狀態(tài),然后進行變換操作,操作完之后,再用restore ()將以前的坐標系狀態(tài)進行恢復,其實是一個入棧和出棧的操作。

2? 表盤控件類的設計與實現

本設計將QWidget作為父對象,定義了用于有關表盤屬性的相關變量如下:

2.1 表盤頭文件(adwidget.h)介紹

頭文件中需要加載如圖2所示的類:

在ADWidget類中使用Q_PROPERTY()宏聲明了自定義屬性:

arcLineColor,每個屬性都有一個數據類型、一個“讀”函數和一個作為可選項的“寫”函數。

在Qt Designer工具中使用窗口部件時,在屬性編輯器里的QWidget屬性下會顯示這些自定義的屬性。這些屬性可以是有QVariant所支持的任何類型。

ADWidget.h包含其私有函數和私有變量。這些私有變量保存這“寫”屬性的值。顏色數據保存在私有變量中,可以通過setArcLineColor()和arcLineColor()函數對它們進行訪問。

2.2 表盤控件類的構造函數和類方法

類的方法在ADWidget.h的文件中定義,ADWidget.cpp文件中實現其所有方法的定義。

2.2.1 構造函數

構造函數中初始化所有私有變量及賦初值。并定義QPainter的對象,設置其相關屬性;定義畫表盤的刻度的畫筆并設置畫筆的顏色、粗細等屬性;同時定義設置畫表盤指針相關屬性和坐標,設置指針的顏色。

2.2.2 重載paintEvent函數

當表盤窗口發(fā)生變化或模擬量數值發(fā)生變化時,自動調用此函數重新實現畫線、等相關操作。在paintEvent函數中調用QPainter的對象函數實現畫線、畫弧、畫數字等操作。

在設定的區(qū)域矩形區(qū)域內畫圓弧,圓弧半徑為m_circleRadius(default:140),以(150,150)為中心點畫;

painter.rotate(a);是以給定的角度(正 順時針/ 負 逆時針)旋轉坐標系;通過調用painter.save(),將坐標系進行保存;調用painter.restore()恢復之前的坐標系;

計算-135°位置處的坐標起始點,根據角度關系,算出刻度的坐標終點;通過旋轉可獲得所有刻度。

表盤的指針從-180°處計算,根據指針定義大小,確定指針起始坐標及中間坐標點,如圖3所示。

3? 表盤實現效果

表盤類在main函數定義對象,并運行后實現的效果如圖4所示。

4? 結論

本文設計了一種基于Linux Qt開發(fā)工具的列車表盤控件,此控件能夠滿足數據顯示的需要,尤其是車輛速度的顯示。此控件繼承了Qt框架提供的QWidgt類,利用 QLinearGradient類、QPainter類、QLabel等類,通過坐標變換函數及旋轉函數,實現指針的旋轉操作;通過重新實載paintEvent函數,實現控件的實時顯示。同時,可將此控件集成到QDesigner工具中,豐富了原有控件庫。經過實際項目驗證,該控件類設計友好、個性化程度較高,能滿足客戶需求。

參考文獻:

[1]閆鋒欣,曾泉人,張志強譯.Jasmin Blanchette, Mark Summe

dield.C++GUI Qt4編程(第2版)[M].北京:電子工業(yè)出版社,201l:2-4.

[2]彭均鍵,史步海,劉洋.基于Qt的嵌入式GUI開發(fā)平臺的搭建[J].微型電腦應用2010,26(02):1-3.

[3]陳孝文,陳蜀宇,馬同杰.基于Linux的嵌入式圖形用戶界面的研究與應用[J].計算機系統(tǒng)應用[J].2009:1-2.

主站蜘蛛池模板: 国产一区二区丝袜高跟鞋| 中文字幕有乳无码| 色综合日本| 久久久久无码精品国产免费| 无码专区在线观看| 欧美一区二区自偷自拍视频| 欧美亚洲综合免费精品高清在线观看| 国产精品视频猛进猛出| 中文字幕首页系列人妻| 极品av一区二区| 成年人免费国产视频| 婷婷亚洲天堂| 亚洲日本一本dvd高清| 亚洲无线一二三四区男男| 色国产视频| 丰满人妻中出白浆| 亚洲视频一区在线| 91精品啪在线观看国产| 啪啪免费视频一区二区| 小说区 亚洲 自拍 另类| 国产情侣一区二区三区| 亚洲无码高清免费视频亚洲| 日韩av无码精品专区| 亚洲熟女偷拍| 国产又爽又黄无遮挡免费观看 | 最新午夜男女福利片视频| 超碰免费91| 四虎免费视频网站| 国产在线日本| 九色在线视频导航91| 99精品国产电影| 狼友av永久网站免费观看| 欧美激情综合| 国产欧美在线观看一区| 日韩毛片免费视频| 欧美午夜小视频| 国产一级特黄aa级特黄裸毛片| 中文字幕佐山爱一区二区免费| 中文字幕66页| 99久久精品免费看国产免费软件| 青草国产在线视频| 久久综合丝袜长腿丝袜| 大香网伊人久久综合网2020| 午夜小视频在线| 免费全部高H视频无码无遮掩| 亚洲91在线精品| 日本三区视频| 成人精品在线观看| 久久婷婷色综合老司机| 亚洲性网站| 日韩小视频网站hq| 国产欧美在线| 99视频在线免费看| 国产毛片高清一级国语| 国产十八禁在线观看免费| 国产精品第三页在线看| 久久亚洲AⅤ无码精品午夜麻豆| 天天综合网站| 欧美午夜精品| 超碰aⅴ人人做人人爽欧美| 国产色爱av资源综合区| 91国内外精品自在线播放| 久久精品国产精品一区二区| a色毛片免费视频| 伊人久久精品无码麻豆精品| 欧美亚洲国产精品第一页| 国产激爽爽爽大片在线观看| 青草视频免费在线观看| 免费一级成人毛片| 午夜一级做a爰片久久毛片| 日韩东京热无码人妻| 99热这里只有精品2| 国产伦片中文免费观看| 日本a∨在线观看| 热久久这里是精品6免费观看| 日本三级欧美三级| 91午夜福利在线观看精品| 亚洲中文字幕97久久精品少妇| 国产一区二区三区在线观看视频| 国产精品香蕉| 国产精品自在在线午夜| 一级毛片免费的|