整體框架包括兩個部分,一部分是UI界面框架,比如一級二級導航菜單按鈕整體布局等,一部分是項目框架,上一篇文章說的是項目框架,這一篇文章來說界面框架,Qt做界面非常快速和高效,尤其是提供了可視化的界面設計,所見即所得,和大部分的開發環境類似,比如宇宙第一的VS,古老的VB,當年超級牛逼的dephi等,都是提供了可視化的所見即所得界面設計器,拖拖控件搞定,然后再去寫對應的事件代碼,最后編譯打包發布。
Qt基本上是超大型一站式GUI超市框架,你要的各種控件都有,比如按鈕、標簽、文本框、下拉框、進度條等,應有盡有,就算沒有的也可以自定義控件來實現,作為一個牛逼的GUI界面框架,要學好還是需要花一丟丟時間的,沒有誰是一蹴而就的,做界面核心就兩點:布局加配色,一般來說這是美工干的活,但是縱觀國內大部分的程序員所在的公司,基本上沒有美工,很可憐,需要程序員一個人全包所有的,從需求分析到詳細設計到代碼編寫到界面設計到售后維護等。
Qt的布局提供了橫向布局、垂直布局、表格布局、柵格布局,主要就這四種,學會了這幾種布局其實還不夠的,很多初學者會發現,達不到想要的效果,其實還要配合兩個牛逼的東西,那就是控件本身的拉伸策略sizePolicy加上彈簧spacer,其中拉伸策略包括了四個要素,水平策略、垂直策略、水平伸展、垂直伸展。在一個完整的帶界面的項目中,肯定需要用上這幾個東西才能做出賞心悅目的界面。
Qt的配色當屬QSS無敵了,這個東西據說是CSS2的子集,理論上包含了CSS2的所有寫法,不過目前CSS3大行其道,QSS還不支持CSS3,估計要重寫QSS解析器才行,代碼量應該巨大,可能官方目前主推qml,未來估計也沒有這個打算更新QSS使其支持CSS3,如果有一天支持CSS3了,那效果絕對宇宙第一了。我開源過3套QSS皮膚樣式。
皮膚開源:[https://gitee.com/feiyangqingyun/QWidgetDemo](https://gitee.com/feiyangqingyun/QWidgetDemo) [https://github.com/feiyangqingyun/QWidgetDemo](https://github.com/feiyangqingyun/QWidgetDemo)
文件名稱:styledemo
體驗地址:[https://gitee.com/feiyangqingyun/QWidgetExe](https://gitee.com/feiyangqingyun/QWidgetExe) [https://github.com/feiyangqingyun/QWidgetExe](https://github.com/feiyangqingyun/QWidgetExe)
文件名稱:bin_sams.zip
1. 采集數據端口,支持串口端口+網絡端口,串口支持自由設置串口號+波特率,網絡支持自由設置IP地址+通訊端口,每個端口支持采集周期,默認1秒鐘一個地址,支持設置通訊超時次數,默認3次,支持最大重連時間,用于重新讀取離線的設備。
2. 控制器信息,能夠添加控制器名稱,選擇控制器地址+控制器型號,設置該控制器下面的探測器數量。
3. 探測器信息,能夠添加位號,可自由選擇探測器型號,氣體種類,氣體符號,高報值,低報值,緩沖值,清零值,是否啟用,報警聲音,背景地圖,存儲周期,數值換算小數點位數,報警延時時間,報警的類型(HH,LL,HL)等。
4. 控制器型號+探測器型號+氣體種類+氣體符號,均可自由配置。
5. 地圖支持導入和刪除,所有的探測器對應地圖位置可自由拖動保存。
6. 端口信息+控制器信息+探測器信息,支持導入導出+導出到excel+打印。
7. 運行記錄+報警記錄+用戶記錄,支持多條件組合查詢,比如時間段+控制器+探測器等,所有記錄支持導出到excel+打印。
8. 導出到excel的記錄支持所有excel+wps等表格文件版本,不依賴excel等軟件。
9. 可刪除指定時間范圍內的數據,支持自動清理早期數據,設置最大保存記錄數。
10. 支持報警短信轉發,支持多個接收手機號碼,可設定發送間隔,比如即時發送或者6個小時發送一次所有的報警信息,短信內容過長,自動拆分多條短信。
11. 支持報警郵件轉發,支持多個接收郵箱,可設定發送間隔,比如即時發送或者6個小時發送一次所有的報警信息,支持附件發送。
12. 高報顏色+低報顏色+正常顏色+0值顏色+曲線背景+曲線顏色等,都可以自由選擇。
13. 軟件的中文標題+英文標題+logo路徑+版權所有都可以自由設置。
14. 提供開關設置開機運行+報警聲音+自動登錄+記住密碼等。
15. 報警聲音可設置播放次數,界面提供17種皮膚文件選擇。
16. 支持云端數據同步,可設置云端數據庫的信息,比如數據庫名稱,用戶名+密碼等。
17. 支持網絡轉發和網絡接收,網絡接收開啟后,軟件從udp接收數據進行解析。網絡轉發支持多個目標IP,這樣就實現了本地采集的軟件,自由將數據轉到客戶端,隨時查看探測器數據。
18. 自動記住用戶最后停留的界面+其他信息,重啟后自動應用。
19. 報警自動切換到對應的地圖,探測器按鈕閃爍。
20. 雙擊探測器圖標,可以進行回控。
21. 支持用戶權限管理,管理員+操作員兩大類,用戶登錄+用戶退出,可以記住密碼和自動登錄,超過三次報錯提示并關閉程序。
22. 支持四種監控模式,設備面板監控+地圖監控+表格數據監控+曲線數據監控,可自由切換,四種同步應用。
23. 支持報警繼電器聯動,一個位號可以跨串口聯動多個模塊和繼電器號,支持多對多。
24. 本地數據存儲支持sqlite+mysql,支持遠程數據同步到云端數據庫。自動重連。
25. 本地設備采集到的數據實時上傳到云端,以便手機APP或者web等其他方式提取。
26. 支持兩種數據源,一種是串口和網絡通過協議采集設備數據,一種是數據庫采集。數據庫采集模式可以作為通用的系統使用。
27. 自帶設備模擬工具,支持16個設備數據模擬,同時還帶數據庫數據模擬,以便在沒有設備的時候測試數據。
28. 默認通信協議采用modbus協議,后期增加mqtt等物聯網協議的支持,做成通用系統。
29. 支持所有windows操作系統+linux操作系統和其他操作系統。
t Designer中有很多UI界面組件,每種組件相對應有可設置的屬性,本篇博文來讓我們簡單了解一下吧~
在Qt Designer中,提供了八大類界面可視化組件分別為:布局組件(Layouts)、分隔組件(Spacers)、按鈕組件(Buttons)、表項視圖(Item Views)、表項組件(Item Widgets)、容器組件(Containers)、輸入組件(Input Widgets)、顯示組件(Display Widgets),在Qt Designer的應用界面設計時,可以將各種功能的組件拖拽到窗口上進行應用的可視化界面設計,而每種組件又可以指定不同的屬性。
布局組件包括:Vertical Layout(水平布局)、Horizontal Layout(垂直布局)、Grid Layout(網格布局)、Form Layout(表單布局)。
分隔組件包括:Horizontal Spacer(水平分隔)、Vertical Spacer(垂直分隔)。
按鈕組件包括:Push Button(按鈕)、Tool Button(工具按鈕)、Radio Button(單選框)、Check Box(復選框)、Command Link Button(命令鏈接按鈕)、Dialog Button Box(選擇按鈕)。
表項視圖包括:List View(列表視圖)、Tree View(樹狀視圖)、Table View(表格視圖)、Column View(列表視圖)、Undo View(撤銷視圖)。
表項組件包括:List Widget(列表表項)、Tree Widget(樹狀表項)、Table Widget(表格表項)。
容器組件包括:Group Box(組合框,可以在內部添加內容,并修改標題頭)、Scroll Area(帶滑動條的框)、Tool Box(抽屜式框)、Tab Widget(標簽式框)、Stacked Widget(棧式,需要信號啟動)、Frame(帶邊框的布局)、Widget(不帶邊框的布局)、MDI Area(分欄顯示)、Dock Widget(浮動窗口)、QAxWidget(只可以在Windows環境使用)。
輸入組件包括:Combo Box(下拉選框)、Font Combo Box(下拉字體框)、Line Edit(行編輯區)、Text Edit(文本編輯區,只可以查看文字、圖片和動畫)、Plain Text Edit(文字編輯框)、Spin Box(調整數字框)、Double Spin Box(浮點型數字調整框)、Time Edit(時間)、Data Edit(日期)、Data/Time Edit(時間和日期)、Dial(羅盤)、Horizontal Scroll Bar(水平滾動條)、Vertical Scroll Bar(垂直滾動條)、Horizontal Slider(水平滑動條)、Vertical Slider(垂直滑動條)、Key Sequence Edit(快捷方式)。
顯示組件包括:Label(標簽組件,可查看文本、網頁、圖片和動畫等)、Text Browser(文本框)、Graphics View(繪圖工具)、Calendar Widget(日歷)、LCD Number(LCD 數碼管)、Progress Bar(進度條)、Horizontal Line(水平分割線)、Vertical Line(垂直分割線)、OpenGL Widget(OpenGL(Open Graphics Library,開放圖形庫)圖形渲染的部件,可以在PyQt和Qt的應用中顯示圖形(包括2D和3D圖形))、QQuickWidget(加載QML文件)。
第二部分有較多內容引用、學習該文章:Designer組件屬性編輯界面中QWidget類相關屬性詳解,很多詳細知識點可以參照該博文。
在Qt Designer中的每種組件屬性編輯部分可以進行設置,如下圖所示:
每種組件的屬性會有所不同之處,這里以QWidget窗口為例,簡單聊聊其屬性,如下所示:
讓我們一起看看吧~
可以看到,最頂層的節點為組件對應的父類(Form),從上往下排列的節點,基本按照父類在上,子類在下的方式排列,很好的體現了類的繼承關系以及相關屬性是哪個類提供的。
enabled屬性
enabled屬性用于表示組件是否可用,一個組件的部件可以接收和處理鼠標和鍵盤事件,當組件不可用時則無法接收和處理鼠標和鍵盤事件。
enabled屬性缺省值為True,有些組件在被禁用時會以不同的方式顯示自己。例如,按鈕可能會將其標簽顯示灰色。
控制組件大小的屬性有:geometry 、sizePolicy、minimumSize、maximumSize、sizeIncrement和baseSize,用于控制組件的初始大小以及動態調整大小的控制。屬性配置界面的geometry定義了組件的初始大小,其他屬性都與組件大小調整時控制組件的大小相關。
geometry屬性
geometry屬性保存組件相對于其父級對象的位置和大小,Qt實際上是以一個長方形來表示組件的位置和大小的,包括左上角的坐標位置、長和寬。
sizePolicy屬性
sizePolicy屬性用于說明組件在布局管理中的縮放方式,當部件沒有在布局管理器中時,該設置無效。
sizePolicy屬性由四個值組成,分別是水平策略、垂直策略、水平伸展和垂直伸展。
實踐可參見:Python-PyQt5開發學習筆記(二):Layout(布局)
minimumSize屬性
mimimumSize屬性表示組件能被縮小到的最小尺寸,單位為像素,縮小到該尺寸后不能再進一步縮小了。如果組件在布局管理器中,且布局管理器也設置了最小尺寸,則部件本身的最小尺寸以部件的mimimumSize為準,布局管理器設置的不起作用。
maximumSize屬性
maximumSize屬性表示組件能被放大到的最大尺寸,放大到該尺寸后不能再進一步放大了。組件的缺省最大值為:(16777215,16777215)。
sizeIncrement屬性
sizeIncrement屬性表示組件調整大小時的每次變化的增量大小(單位:像素)的基數,實際調整大小計算公式如下: width=baseSize().width() + i * sizeIncrement().width() height=baseSize().height() + j * sizeIncrement().height()
其中i,j為非負整數。
baseSize屬性
baseSize屬性是組件的基礎大小(單位:像素),如果組件設定了sizeIncrement,該屬性用于在調整組件尺寸時計算組件應該調整到的合適值,這個屬性缺省值是(0,0)。
palette屬性
palette屬性是調色板作用,管理著控件和窗體的所有顏色,可用于管理控件的外觀顯示以及設置組成。
font屬性
font屬性中可以設置組件的字體屬性,包括字體的字體簇(Family)、大小(Size)、是否粗體(Bold)、是否斜體(Italic)、是否帶下劃線(Underline)、是否帶刪除線(Strikeout)等。
cursor屬性
cursor屬性保存組件的鼠標光標形狀,當鼠標位于該組件上時就會呈現該屬性設置的光標形狀,可取值的范圍及含義如下圖所示:
mouseTracking屬性
mouseTracking屬性用于保存是否啟用鼠標跟蹤,缺省情況是不啟用的。不啟用的情況下,對應部件只接收在鼠標移動同時至少一個鼠標按鍵按下時的鼠標移動事件,啟用鼠標跟蹤的情況下,任何鼠標移動事件部件都會接收。
tabletTracking屬性
tabletTracking屬性保存是否啟用組件的平板跟蹤,缺省是不起用的。不啟用平板跟蹤的情況下,部件僅接收觸控筆與平板接觸或至少有個觸控筆按鍵按下時的觸控筆移動事件。 如果組件啟用了平板跟蹤功能,部件能接收觸控筆靠近但未真正接觸平板時的觸控筆移動事件,這可以用于監視操作位置以及部件的輔助操作功能(如旋轉和傾斜),并為圖形界面提供這些操作的信息接口。
focusPolicy屬性
focusPolicy屬性可以設置組件的焦點策略。設置參數說明如下所示:
contextMenuPolicy屬性
contextMenuPolicy屬性是組件的快捷菜單策略,快捷菜單通過在部件上點擊鼠標右鍵觸發。設置參數說明如下所示:
acceptDrops屬性
acceptDrops屬性表示當前組件是否接受鼠標拖放事件,鼠標拖放應該是與鼠標拖拽結合在一起的,在Qt Designer中可以通過屬性acceptDrops設置部件是否接受鼠標拖放事件。如果部件接受拖放,則在鼠標拖放時,拖放事件會發送給鼠標當前光標下接受拖放的第一個部件。
如果組件設置了acceptDrops屬性為True,則就是通知系統該組件可接受鼠標拖放事件。
windowTitel屬性
windowTitle屬性是對窗口標題進行設置。
windowIcon屬性
windowIcon屬性是對窗口圖標進行設置。
windowOpacity屬性
windowOpacity屬性為浮點數,表示組件透明度,為1完全不透明,為0完全透明,缺省是1。
toolTip屬性
toolTip屬性設置組件的toolTip提示信息,toolTip提示信息在鼠標放到控件上會浮動出一個小框顯示提示信息。
toolTipDuration屬性
toolTipDuration屬性控制toolTip提示信息顯示的時長,單位是毫秒,如果設置為-1,則顯示時長根據toolTip內容的長度來計算。
statusTip屬性
statusTip屬性保存statusTip提示信息,statusTip提示信息在鼠標放到控件上時在窗口的狀態欄顯示提示信息,如果窗口無狀態欄則不顯示。statusTip屬性缺省值為空字符串。
whatsThis屬性
whatsThis屬性保存組件的幫助信息。whatsThis的幫助信息一般在組件獲得焦點后按Shift+F1彈出顯示,如果這個快捷鍵被別的功能占用,則whatsThis的幫助信息可能無法展示。有些對話窗提供一個帶問號的按鈕可以點擊顯示whatsThis的幫助信息。whatsThis屬性缺省值為空字符串。
accessibleName屬性
accessibleName屬性是輔助閱讀中顯示的組件的名稱,用于殘疾人輔助閱讀。對于大多數小部件,無需設置此屬性,因為Qt會調用部件相關屬性顯示,如按鈕將顯示按鈕的文本,但當小部件不提供任何文本時,設置此屬性很重要。例如,只包含圖標的按鈕需要將此屬性設置為與屏幕閱讀器一起使用。此屬性默認為空。
accessibleDescription屬性
accessibleDescription屬性保存輔助技術所看到的部件描述,用于殘疾人輔助閱讀。是對accessibleName屬性的補充說明。此屬性默認為空。
layoutDirection屬性
layoutDirection屬性保存的是組件的布局方向,有三個取值:
autoFillBackground屬性
autoFillBackground屬性可以確認組件背景是否自動填充。
styleSheet屬性
styleSheet屬性是定義組件外觀的屬性樣式表,在Qt中styleSheet樣式表是類似于html的css樣式一樣的方法,只是專門為Qt中的部件開發的。styleSheet的定義語法也是類似CSS,并且是跨平臺支持的。
locale屬性
locale屬性用于設置語言環境,包括語言和國家。如果一個部件沒有設置語言環境,則使用父對象的語言環境或者默認語言環境(如果部件是頂層部件)。
windowFilePath屬性
windowFilePath屬性僅對窗口對象有效,用于關聯一個窗口和對應的文件及路徑。 當窗口沒有設置標題屬性的情況下,則窗口標題展示展示windowFilePath對應的文件名的信息(路徑信息不展示),如果二者都設置,則優先使用窗口標題屬性的設置作為標題。
該屬性缺省為空,這個功能在窗口打開文件進行操作時可以使用來標記打開的文件。
inputMethodHints屬性
inputMethodHints屬性只對輸入組件有效,輸入法使用它來檢索有關輸入法應如何操作的提示,例如,如果設置了只允許輸入數字的標志,則輸入法可能會更改其可視組件,以反映只能輸入數字。相關取值及含義如下:
windowModality屬性
windowModality屬性只對窗口對象有效,保存的是哪些類型的窗口被模式窗口阻塞。模式窗口防止其他窗口中的部件獲取輸入。此屬性的值控制對應窗口可見時阻塞哪些類型的窗口獲取輸入。在模式窗口可見時更改此屬性無效。相關取值及含義如下:
大屏地圖模塊采用瀏覽器模塊+echart組件,Qt自帶了webkit或者webengine模塊,其中在win上mingw編譯器的Qt5.6以后的版本,沒有了瀏覽器模塊,這個就需要用第三方的瀏覽器模塊比如miniblink或者cef等,個人偏好miniblink因為足夠簡單。為了能夠兼容所有的Qt版本和應用場景,特意專門寫了通用瀏覽器控件獨立的類webview,只要new即可,會自動判斷Qt版本以及存在哪種瀏覽器模塊就用哪種,優先采用Qt自帶的瀏覽器模塊,除非手動指定miniblink就用miniblink瀏覽器模塊。
中間大屏地圖多種樣式:
*請認真填寫需求信息,我們會在24小時內與您取得聯系。