00 前言說明
從事Qt開發十年有餘,一開始是做C#.NET開發的,因爲項目需要,轉行做嵌入式linux開發,在嵌入式linux上做可視化界面開發一般首選Qt,當然現在可選的方案很多比如安卓,但是十多年前那時候板子性能低,安卓在這個上面跑的話卡成屎,當時的內存大概是128MB左右,Qt也是主要用QWidget,剛出來的qml在這個上面跑個最簡單的示例也是卡成屎,這也造成了本人一直對qml的印象不大好,非常依賴GPU硬件。所以也一直沒有怎麼去學習qml,主要深耕在qwidget領域,現在想學的時候,心有餘而力不足,包括現在從qmake轉向cmake,年紀大了學不動了,哎年輕真好。
學習Qt也是一個漸進的過程,量變產生質變,一點一滴積累,誰都不可能一蹴而就的,在編程的這條路上其實是很孤獨的,要能學會左手溫暖右手。別看我QtWidget水平比很多人高一點,其實全國也就幾萬名開外,你們是不知道天外有天,人外有人!應該到處走走,不要坐井觀天!因爲我遇到過幾十個水平比我厲害的多了去了的,這還僅僅是冰山一角!真正的大佬一般不混羣也不混論壇的,低調得很!可能這就是所謂的悶聲發大財。此情此景我想吟詩一首:誤入IT悔無聲,單槍匹馬夜挑燈,一入Qt深似海,從此脂粉不沾身。此情此景我想再吟詩一首:Qt羣裏行人稀,常有車手較高低,如今車道依舊在,不見當年老司機。
- 國內站點:https://gitee.com/feiyangqingyun
- 國際站點:https://github.com/feiyangqingyun
- 個人主頁:https://blog.csdn.net/feiyangqingyun
01 可視化大屏電子看板系統
- 採用分層設計,整體總共分三級界面,一級界面是整體佈局,二級界面是單個功能模塊,三級界面是單個控件。
- 子控件包括餅圖、圓環圖、曲線圖、柱狀圖、柱狀分組圖、橫向柱狀圖、橫向柱狀分組圖、合格率控件、百分比控件、進度控件、設備狀態面板、表格數據、地圖控件、視頻控件等。
- 二級界面可以自由拖動懸浮,支持最小化隱藏、最大化關閉、響應雙擊自定義標題欄。
- 數據源支持模擬數據(默認)、數據庫採集、串口通信(需定製)、網絡通信(需定製)、網絡請求等,可自由設定每個子界面的採集間隔即數據刷新頻率。
- 採用純QWidget編寫,親測Qt4.6到Qt6.6任意版本,理論上支持後續其他Qt版本。
- 超強跨平臺,親測windows、linux、mac、國產uos、國產銀河麒麟kylin等系統,效果完美,同時還支持嵌入式linux比如樹莓派、香橙派、全志、imx6等。
- 同時集成了自定義控件、qchart餅圖、echart地圖等功能。
- 內置多套配色風格樣式(紫色、藍色、深藍、黑色),默認紫色,自適應任意分辨率。
- 可設置系統標題、目標分辨率、佈局方案,啓動立即應用。
- 可設置主背景顏色、面板顏色、十字線遊標顏色等各種顏色。
- 可設置多條曲線不同顏色,沒有設置顏色的情況下內置多套精美顏色隨機應用。
- 可設置標題欄背景顏色、文字顏色。
- 可設置曲線圖表背景顏色、文字顏色、網格顏色。
- 可設置正常顏色、警戒顏色、報警顏色、禁用顏色、百分比進度顏色。
- 可分別設置各種字體大小,比如全局字體、軟件名稱、標題欄、子標題欄、加粗標籤等。
- 可設置標題欄高度、表頭高度、行高度。
- 曲線支持遊標、定位線、懸停高亮數據點、懸停顯示值。
- 柱狀圖支持頂部(可設置頂端、上部、中間、底部)顯示數據,全部自適應計算位置。
- 支持平滑曲線,內置多種平滑曲線算法,還支持面積圖平滑。
- 面積圖填充顏色可選多種規則比如單色透明度填充、透明度漸變填充等。
- 數據庫支持sqlite、mysql、postgresql、oracle、國產人大金倉等數據庫。
- 主界面直接鼠標右鍵切換佈局、配色方案、關閉開啓某個二級窗體。
- 自動記憶所有子窗口的大小和位置,下次啓動立即應用。
- 動態加載佈局方案菜單,可以動態新建佈局、恢復佈局、保存佈局、另存佈局等,用戶可以製造任意佈局。
- 二級窗體,雙擊從主窗體分離出來浮動,可以自由調整大小。再次雙擊標題欄最大化,再次雙擊還原。
- 子模塊也可以全屏顯示作爲一個大屏,這樣就可以一個大屏拓展出多個子大屏,放大查看子模塊的數據詳情,適用多屏展示。
- 每個模塊都可以自定義採集速度,如果是數據庫採集會自動排隊處理,後期還可以拓展每個子模塊都獨立的數據庫採集。
- 提供系統設置模塊進行整體的配置參數設置,效果立即應用。
- 提供精美炫酷的大屏地圖模塊,包括靜態圖片、閃爍效果、遷徙效果、世界地圖、區域地圖等,可指定點的經緯度座標,識別單擊響應,可以做地圖跳轉等,每個點都可以不同的顏色和提示信息。
- 除了提供大屏系統外,還將每個模塊都做了獨立的模塊示例界面,每個模塊都可以獨立學習使用,裏面用到的控件也單獨做了控件示例界面,方便學習每個控件如何使用。
- 非常詳細的開發和使用手冊,其中包括數據庫說明、模塊對照圖、控件對照圖、項目結構、代碼說明(精確到每個類)、演示demo、使用方法等。
02 物聯網管理平臺
2.1 軟件模塊
- 設備監控模塊,包括數據監控(表格形式展示)、設備面板(面板形式展示)、地圖監控(地圖形式展示)、曲線監控(曲線形式展示)。
- 數據查詢模塊,包括報警記錄、運行記錄、操作記錄。
- 系統設置模塊,包括基本設置、端口管理、控制器管理、探測器管理、報警聯動、類型設置等。
- 其他設置模塊,包括用戶管理、地圖管理、位置調整、組態設計、設備調試等。
2.2 基礎功能
- 設備數據採集,支持串口、網絡,串口可設置串口號、波特率,網絡可設置IP地址、通訊端口。
- 每個端口支持採集週期時間,默認1秒鐘一個設備。
- 支持設置通訊超時次數,默認3次。
- 支持最大重連時間,用於重新讀取離線的設備。
- 控制器信息,能夠添加控制器名稱,選擇控制器地址、控制器型號,設置該控制器下面的探測器數量。
- 探測器信息,能夠添加位號、探測器型號、氣體種類、氣體符號、高報值、低報值、緩衝值、清零值、是否啓用、報警聲音、背景地圖、存儲週期、數值換算小數點位數、報警延時時間、報警的類型(HH,LL,HL)等。
- 類型管理可配置控制器型號、探測器型號、氣體種類、氣體符號等。
- 地圖支持導入和刪除,所有的探測器在地圖上的位置可自由拖動保存。
- 端口信息、控制器信息、探測器信息、類型信息、用戶信息等,都支持導入、導出、導出到excel、打印。
- 運行記錄、報警記錄、操作記錄,都支持多條件組合查詢,比如時間段、控制器、探測器等,所有記錄支持導出到excel/pdf和打印。
- 運行記錄、報警記錄、操作記錄都可刪除指定時間範圍內的數據。
- 系統設置可選擇對應表最大保存記錄數,自動清理早期數據,留出足夠的空間存儲重要的數據。
- 報警短信轉發,支持多個接收手機號碼,可設定發送間隔,比如即時發送或者6個小時發送一次所有的報警信息,短信內容過長,自動拆分多條短信。
- 報警郵件轉發,支持多個接收郵箱,可設定發送間隔,比如即時發送或者6個小時發送一次所有的報警信息,支持附件發送。
- 設置軟件的中文標題、英文標題、logo路徑、版權所有等。
- 開關設置開機運行、報警聲音、自動登錄、記住密碼等。
- 報警聲音可設置播放次數,界面風格樣式提供18套皮膚文件選擇。
- 用戶管理,包括用戶權限配置,不同用戶可以有不同模塊的權限。
- 用戶登錄和用戶退出,可以記住密碼和自動登錄,超過三次報錯提示並關閉程序。
- 四種監控模式,設備面板監控、地圖監控、表格數據監控、曲線數據監控,可自由切換,四種模式下都實時展示採集到的數據,報警閃爍等。
- 報警繼電器聯動,一個位號可以跨串口聯動多個模塊和繼電器號,支持多對多。
2.3 特色功能
- 通信協議支持modbus_com、modbus_tcp_rtu,後期拓展mqtt等協議。
- 數據源除了真實的硬件設備採集,還可選數據庫採集,這樣用戶可以安排其他程序員比如java程序員將前端採集好的數據放到數據庫,本系統直接從數據庫採集即可。數據庫採集模式可以作爲通用的系統使用,更適合多人多系統協作。
- 智能跳過超時的設備,加快對在線設備的採集速度,當設備數量很多的時候尤其有用。
- 對智能跳過的超時的設備,在設定的重連時間自動採集一次,以便探測設備是否又重新上線。
- 每個探測器可控是否啓用,不啓用則不會採集,也不會在界面顯示,相當於運行階段臨時關閉。
- 探測器可設置緩衝值和報警延時時間,在該值附近波動產生的報警,不計入報警,只有持續處於報警值且超過報警延時時間纔算真正報警,這樣可以規避很多波動導致的誤報。
- 探測器可設置存儲週期,按照設定的時間來存儲一條運行記錄,可以按照重要程度對重要性高的設定存儲週期短一些,不重要的設定大一些,這樣可以節省不少的存儲空間,也保證了重要的數據及時存儲。
- 探測器可設置清零值,在一些高精度高靈敏的設備可能出廠的時候默認值未必是0,需要設定清零值來表示初始值。
- 探測器可設置小數點,用於計算後的真實數據控制小數點點位顯示,相當於除以10、除以100、除以1000,這樣大部分的探測器數據直接通過小數點位設置控制真實換算後的值,極個別的需要特殊轉換的可以在通信協議中約定。
- 探測器報警的類型支持多種,有些設備是高於某個值高報,低於某個值低報,而有些設備是在最小值最大值範圍內是高報,低於最小值低報,高於最大值正常。這樣可以分情況處理,涵蓋各種報警類型。
- 原創數據導入、導出、打印機制,跨平臺不依賴任何組件,瞬間導出數據。
- 導出到excel的記錄支持所有excel、wps等表格文件版本,不依賴excel等軟件。
- 高報顏色、低報顏色、正常顏色、默認值顏色等,都可以自由設置。
- 支持雲端數據同步,將本地採集到的數據實時同步到雲端。
- 支持網絡轉發和網絡接收,網絡接收開啓後,軟件從udp接收數據進行解析。網絡轉發支持多個目標IP,這樣就實現了本地採集的軟件,自由將數據轉到客戶端,隨時查看採集到的數據。
- 自動記住用戶最後停留的界面以及其他配置信息,重啓後自動應用。
- 報警自動切換到對應的地圖,探測器按鈕閃爍,表格數據對應顏色顯示。
- 雙擊探測器圖標,彈出對應探測器詳細信息,可以根據需要定製回控操作。
- 數據庫支持多種,包括sqlite、mysql、sqlserver、postgresql、oracle、人大金倉等。
- 本地設備採集到的數據實時上傳到雲端,以便手機APP或者web等其他方式提取。
- 自帶設備模擬工具,支持不同型號的多個設備數據模擬,同時還帶數據庫數據模擬,以便在沒有設備的時候測試數據。
- 標準modbus協議,各種控制器類型、探測器類型、種類、符號等全部自定義,非常靈活和強大,通信協議示例數據非常完整,通用各種modbus協議系統,適用於各種應用場景接入。
- 同時集成了串口通信、網絡通信、數據庫通信、數據導入導出打印、通信協議解析、界面UI、全局換膚等衆多組件和知識點,非常適合新手入門和進階。
- 支持xp、win7、win10、、win11、linux、mac、各種國產系統(UOS、中標麒麟、銀河麒麟等)、嵌入式linux等系統。
- 註釋完整,項目結構清晰,超級詳細完整的使用開發手冊,精確到每個代碼文件的功能說明,不斷持續迭代版本。
03 視頻監控系統
3.1 軟件模塊
- 視頻監控模塊,各種停靠小窗體子模塊,包括設備列表、圖文警情、窗口信息、雲臺控制、預置位、巡航設置、設備控制、懸浮地圖、網頁瀏覽等。
- 視頻回放模塊,包括本地回放、遠程回放、設備播放、圖片回放、視頻上傳等。
- 電子地圖模塊,包括圖片地圖、在線地圖、離線地圖、路徑規劃等。
- 日誌查詢模塊,包括本地日誌、設備日誌等。
- 系統設置模塊,包括系統設置(基本設置、視頻參數、數據庫設置、地圖配置、串口配置等)、錄像機管理、攝像機管理、輪詢配置、用戶管理等。
3.2 基礎功能
- 支持各種視頻流(rtsp、rtmp、http等)、視頻文件(mp4、rmvb、avi等)、本地USB攝像機播放。
- 支持多畫面切換,包括1、4、6、8、9、13、16、25、36、64畫面切換。
- 支持全屏切換,多種切換方式包括鼠標右鍵菜單、工具欄按鈕、快捷鍵(alt+enter全屏,esc退出全屏)。
- 支持視頻輪詢,包括1、4、9、16畫面輪詢,可設置輪詢分組(輪詢預案)、輪詢間隔、碼流類型等。
- 支持onvif協議,包括設備搜索、雲臺控制、設備控制(圖片參數、校對時間、系統重啓,抓拍圖片等)。
- 支持權限管理,不同的用戶可以對應不同的模塊權限,比如刪除日誌、關閉系統等。
- 數據庫支持多種,包括sqlite、mysql、sqlserver、postgresql、oracle、人大金倉等。
- 本地USB攝像機支持設置分辨率、幀率等參數。
- 所有停靠模塊都自動生成對應的菜單用來控制顯示和隱藏,在標題欄右鍵可以彈出。
- 支持顯示所有模塊、隱藏所有模塊、復位普通佈局、復位全屏佈局。
- 雙擊設備彈出實時預覽視頻,支持圖片地圖、在線地圖、離線地圖等。
- 攝像機節點拖曳到對應窗體播放視頻,同時支持拖曳本地文件直接播放。
- 刪除視頻支持鼠標右鍵刪除、懸浮條關閉刪除、拖曳到視頻監控面板外刪除等多種方式。
- 圖片地圖上設備按鈕可自由拖動,自動保存位置信息。百度地圖上可以鼠標單擊獲取經緯度信息,用來更新設備位置。
- 視頻監控面板窗體中任意通道支持拖曳交換,瞬間響應。
- 封裝了百度地圖,視圖切換,運動軌跡,設備點位,鼠標按下獲取經緯度等。
- 雙擊節點、拖曳節點、拖曳窗體交換位置等操作,均自動更新保存最後的播放地址,下次軟件打開自動應用。
- 右下角音量條控件,失去焦點自動隱藏,音量條帶靜音圖標。
- 支持視頻截圖,可指定單個或者對所有通道截圖,底部小工具欄也有截圖按鈕。
- 支持超時自動隱藏鼠標指針、自動全屏機制。
- 支持onvif雲臺控制,可上下左右移動雲臺攝像機,包括復位和焦距調整等。
- 支持任意onvif攝像機,包括但不限於海康、大華、宇視、天地偉業、華爲等。
- 可保存視頻,可選定時存儲或者單文件存儲,可選存儲間隔時間。
- 可設置視頻流通信方式tcp+udp,可設置視頻解碼是速度優先、質量優先、均衡等。
- 可設置軟件中文名稱、英文名稱、LOGO圖標等。
- 存儲的視頻文件支持導出到指定目錄,支持批量上傳到服務器。
3.3 特色功能
- 主界面採用停靠窗體模式,各種組件以小模塊的形式加入,可自定義任意模塊加入。
- 停靠模塊可拖動任意位置嵌入和懸浮,支持最大化全屏,支持多屏幕。
- 雙重佈局文件存儲機制,正常模式、全屏模式都對應不同的佈局方案,自動切換和保存,比如全屏模式可以突出幾個模塊透明顯示在指定位置,更具科幻感現代化。
- 原創onvif協議機制,採用底層協議解析(udp廣播搜索+http請求執行命令)更輕量易懂易學習拓展,不依賴任何第三方組件比如gsoap。
- 原創數據導入導出機制,跨平臺不依賴任何組件,瞬間導出數據。
- 內置多個原創組件,宇宙超值超級牛逼,包括數據導入導出組件(導出到xls、pdf、打印)、數據庫組件(數據庫管理線程、自動清理數據線程、萬能分頁、數據請求等)、地圖組件、視頻監控組件、文件多線程收發組件、onvif通信組件、通用瀏覽器內核組件等。
- 自定義信息框+錯誤框+詢問框+右下角提示框(包含多種格式)等。
- 精美換膚,高達17套皮膚樣式隨意更換,所有樣式全部統一,包括菜單等。
- 視頻控件懸浮條可以自行增加多個按鈕,監控界面底部小工具欄也可自行增加按鈕。
- 雙擊攝像機節點自動播放視頻,雙擊節點自動依次添加視頻,會自動跳到下一個,雙擊父節點自動添加該節點下的所有視頻。可選主碼流、子碼流。
- 錄像機管理、攝像機管理,可添加刪除修改導入導出打印信息,立即應用新的設備信息生成樹狀列表,不需重啓。
- 可選多種內核自由切換,ffmpeg、vlc、mpv等,均可在pro中設置。推薦用ffmpeg,跨平臺最多,默認提供好了linux和mac平臺上編譯好的庫。
- 支持硬解碼,可設置硬解碼類型(qsv、dxva2、d3d11va等)。
- 默認採用opengl繪製視頻,超低的CPU資源佔用,支持yuyv和nv12兩種格式繪製,很牛逼。
- 高度可定製化,用戶可以很方便的在此基礎上衍生自己的功能,比如增加自定義模塊,增加運行模式、機器人監控、無人機監控、挖掘機監控等。
- 支持xp、win7、win10、linux、mac、各種國產系統(UOS、中標麒麟、銀河麒麟等)、嵌入式linux等系統。
- 註釋完整,項目結構清晰,超級詳細完整的使用開發手冊,精確到每個代碼文件的功能說明,不斷持續迭代版本。
04 自定義控件大全
- 超過202個精美控件並持續不斷迭代更新升級,種類超多,控件類型極其豐富。
- 涵蓋了各種儀表盤、進度條、進度球、指南針、曲線圖、標尺、溫度計、導航條、導航欄,flatui、高亮按鈕、滑動選擇器、農曆、廣告輪播、餅狀圖、環形圖、時間軸、拓展控件、增強控件等。
- 每個類都是獨立的一個.h頭文件和.cpp實現文件組成,零耦合,不依賴其他文件,方便單個控件獨立出來以源碼形式集成到項目中,方便直觀。
- 控件數量遠超其他第三方控件庫比如qwt集成的控件數量,使用方式也比其簡單友好零耦合。
- 支持任意Qt版本,親測Qt4/5/6的所有版本,全部純Qt編寫,QWidget+QPainter繪製。
- 支持任意編譯器,包括但不限於mingw、msvc、gcc、clang等編譯器。
- 支持任意操作系統,包括但不限於windows、linux、mac、android、uos、銀河麒麟、各種國產linux、嵌入式linux、樹莓派、香橙派、全志H3等。
- 支持編譯生成設計師插件,可直接集成到QtCreator的控件欄中,和自帶的控件一樣使用,大部分效果只要設置幾個屬性即可,極爲方便。
- 支持編譯生成獨立的非插件形式的動態庫文件,體積小,比如嵌入式linux不支持designer只需要動態庫的形式。
- 每個控件都有一個單獨的完整的使用demo,方便參考學習單個控件使用,非常適合初學者。
- 提供一個所有控件使用的集成的example,方便快速查看所有控件的效果。
- 支持直接源碼集成到example的方式,方便編譯到安卓,for web套件等。
- 支持編譯成wasm文件,直接網頁運行,可以在谷歌、火狐、edge等瀏覽器運行,原生性能。
- 每個控件的源代碼都有詳細中文註釋,都按照統一設計規範編寫,方便學習自定義控件的編寫。
- 每個控件都內置默認配色,demo對應的配色都非常精美。
- 部分控件提供多種樣式風格選擇,多種指示器樣式選擇。
- 所有控件自適應佈局和窗體拉伸變化,自動縮放。
- 配套額外的自定義控件屬性設計器,類似組態設計器,純中文屬性名稱,支持拖曳設計,所見即所得,支持導入導出xml格式。
- 集成fontawesome圖形字體+阿里巴巴iconfont收藏的幾百個圖形字體,享受圖形字體帶來的樂趣。
- 所有控件最後生成一個dll動態庫文件,可以直接集成到qtcreator中拖曳設計使用。
- 控件源碼全部分門別類存放,pri模塊形式集成,提供控件對照表快速查找對應控件和說明。
05 自定義曲線圖柱狀圖
- 可設置X軸Y軸範圍值。
- 可設置背景顏色、文本顏色、網格顏色。
- 可設置三條曲線顏色、顏色集合。
- 可設置是否顯示十字定位線,支持分別開啓橫向或者縱向定位線。
- 可設置十字定位線的寬度、顏色。
- 可設置是否顯示數據點、數據點的大小。
- 可設置是否填充背景顏色形成面積圖。
- 可設置各種交互模式,比如拖動、滾輪縮放等。
- 可設置座標軸間距、第二座標系可見。
- 提供接口setDataLine直接設置曲線,支持多條。
- 提供接口setDataBar直接設置柱狀圖,支持多條形成堆積圖。
- 提供接口setLabs設置文本標籤替代key,包括X軸和Y軸。
- 提供清空數據、重繪圖表、外部獲取QCustomPlot對象等函數接口,這樣就可以進行更加詳細的參數設置。
- 提供函數 start() 和 stop() 來模擬正弦曲線。
- 可設置柱狀圖顯示值、值的位置(頂部、中間、底部)、精確度、顏色。
- 支持鼠標移動到數據點高亮顯示數據點,顯示數據提示信息。
- 可設置提示信息位置:自動處理、頂部、右上角、右側、右下角、底部、左下角、左側、左上角等。
- 可設置是否校驗數據產生不同的背景顏色,柱狀圖的每根柱子都可以根據數據生成不同背景顏色,比如預警黃色、報警紅色。
- 可設置是否顯示圖例、圖例位置、圖例行數、圖例單行顯示。
- 支持多條曲線、柱狀圖、柱狀分組圖、橫向柱狀圖、橫向分組圖、柱狀堆積圖等。
- 內置 N>15 套精美顏色,自動取顏色集合的顏色,省去配色的煩惱。
- 每條柱狀圖都可以設置不同的顏,分組柱狀圖可以設置顏色交替。
- Y軸數值支持百分比顯示,可拓展改成成其他格式。
- 內置平滑曲線算法,支持平滑曲線繪製,傳入點集合即可。
- 同時支持 QCustomPlot 1.3、2.0、2.1等後續所有版本。
- 提供多座標軸示例,一條曲線對應自己獨立的座標軸。
- 提供多曲線圖示例,一個曲線控件中繪製多條獨立的曲線,曲線有自己的獨立的座標軸,非常適用於一個設備需要分開展示多條曲線的場景,而不是共用一套座標系。
- 支持Qt4-Qt6任意Qt版本,支持任意編譯器、任意操作系統。
06 視頻監控Onvif綜合示例
- 廣播搜索設備,支持IPC和NVR,依次返回。
- 可選擇不同的網卡IP進行對應網段設備的搜索。
- 依次獲取Onvif地址、Media地址、Profile文件、Rtsp地址。
- 可對指定的Profile獲取視頻流Rtsp地址,比如主碼流地址、子碼流地址。
- 可對每個設備設置Onvif用戶信息,用於認證獲取詳細信息。
- 可實時預覽攝像機圖像。
- 支持雲臺控制,可上下左右調節雲臺,支持絕對移動、相對移動、連續移動三種方式,可對圖像拉近拉遠。
- 支持獲取預置位集合、調用預置位、添加預置位、刪除預置位等。
- 支持圖片參數設置,包括亮度、對比度、飽和度、銳度等。
- 支持Qt4和Qt6任意Qt版本以及後續Qt版本,親測Qt4.7到Qt6.5。
- 支持任意編譯器,親測mingw、msvc、gcc、clang。
- 支持任意操作系統,親測xp、win7、win10、android、linux、嵌入式linux、樹莓派全志H3等。
- 支持任意Onvif攝像機和NVR,親測海康、大華、宇視、天地偉業、華爲、海思芯片內核等,可定製開發。
- 支持對指定IP地址及onvif地址進行單播搜索,比如跨網段情況下非常有用。
- 支持指定過濾條件過濾搜索設備,比如只搜索某個網段的設備或者針對某個地址的設備。
- 支持搜索間隔和搜索策略設置,保證所有設備搜索回來,在大量設備現場很有用(親測上千個攝像機現場,搜索回來的設備數量比攝像機廠家自帶搜索工具還要準確)。
- 可對設備進行重啓、網絡參數獲取等。
- 支持各種事件訂閱(入侵報警、越界報警、遮擋報警等)、Onvif抓圖等操作。
- 支持NTP校時和時間同步設置。
- 支持OSD相關操作,可以增刪改查OSD信息。
- 內置了線程實時執行Onvif指令隊列,排隊最大速度的執行對應的指令,執行結果信號發出。
- 採用的最底層的TCP+UDP通信機制,原創最底層協議解析,純QtWidget編寫。
- 超級小巧輕量,總共約3000行代碼,不依賴任何第三方的庫和組件,跨平臺。
- 封裝好了通用的數據發送和接收解析的函數,可以非常方便的自行拓展其他Onvif處理。
- 工具上提供了收發數據文本框,顯示收發的數據,方便查看和分析。
- 支持所有Onvif設備,代碼工整,接口友好,直接引入pri即可使用。
07 視頻綜合應用示例
7.1 基礎功能
- 支持各種音頻視頻文件格式,比如mp3、wav、mp4、asf、rm、rmvb、mkv等。
- 支持本地攝像頭設備,可指定分辨率、幀率。
- 支持各種視頻流格式,比如rtp、rtsp、rtmp、http等。
- 本地音視頻文件和網絡音視頻文件,自動識別文件長度、播放進度、音量大小、靜音狀態等。
- 文件可以指定播放位置、調節音量大小、設置靜音狀態等。
- 支持倍速播放文件,可選0.5倍、1.0倍、2.5倍、5.0倍等速度,相當於慢放和快放。
- 支持開始播放、停止播放、暫停播放、繼續播放。
- 支持抓拍截圖,可指定文件路徑,可選抓拍完成是否自動顯示預覽。
- 支持錄像存儲,手動開始錄像、停止錄像,部分內核支持暫停錄像後繼續錄像,跳過不需要錄像的部分。
- 支持無感知切換循環播放、自動重連等機制。
- 提供播放成功、播放完成、收到解碼圖片、收到抓拍圖片、視頻尺寸變化、錄像狀態變化等信號。
- 多線程處理,一個解碼一個線程,不卡主界面。
7.2 特色功能
- 同時支持多種解碼內核,包括qmedia內核(Qt4/Qt5/Qt6)、ffmpeg內核(ffmpeg2/ffmpeg3/ffmpeg4/ffmpeg5)、vlc內核(vlc2/vlc3)、mpv內核(mpv1/mp2)、監控廠家sdk內核等。
- 非常完善的多重基類設計,新增一種解碼內核只需要實現極少的代碼量,就可以應用整套機制。
- 同時支持多種畫面顯示策略,自動調整(原始分辨率小於顯示控件尺寸則按照原始分辨率大小顯示,否則等比例縮放)、等比例縮放(永遠等比例縮放)、拉伸填充(永遠拉伸填充)。所有內核和所有視頻顯示模式下都支持三種畫面顯示策略。
- 同時支持多種視頻顯示模式,句柄模式(傳入控件句柄交給對方繪製控制)、繪製模式(回調拿到數據後轉成QImage用QPainter繪製)、GPU模式(回調拿到數據後轉成yuv用QOpenglWidget繪製)。
- 支持多種硬件加速類型,ffmpeg可選dxva2、d3d11va等,mpv可選auto、dxva2、d3d11va,vlc可選any、dxva2、d3d11va。不同的系統環境有不同的類型選擇,比如linux系統有vaapi、vdpau,macos系統有videotoolbox。
- 解碼線程和顯示窗體分離,可指定任意解碼內核掛載到任意顯示窗體,動態切換。
- 支持共享解碼線程,默認開啓並且自動處理,當識別到相同的視頻地址,共享一個解碼線程,在網絡視頻環境中可以大大節約網絡流量以及對方設備的推流壓力。國內頂尖視頻廠商均採用此策略。這樣只要拉一路視頻流就可以共享到幾十個幾百個通道展示。
- 自動識別視頻旋轉角度並繪製,比如手機上拍攝的視頻一般是旋轉了90度的,播放的時候要自動旋轉處理,不然默認是倒着的。
- 自動識別視頻流播放過程中分辨率的變化,在視頻控件上自動調整尺寸。比如攝像機可以在使用過程中動態配置分辨率,當分辨率改動後對應視頻控件也要做出同步反應。
- 音視頻文件無感知自動切換循環播放,不會出現切換期間黑屏等肉眼可見的切換痕跡。
- 視頻控件同時支持任意解碼內核、任意畫面顯示策略、任意視頻顯示模式。
- 視頻控件懸浮條同時支持句柄、繪製、GPU三種模式,非絕對座標移來移去。
- 本地攝像頭設備支持指定設備名稱、分辨率、幀率進行播放。
- 錄像文件同時支持打開的視頻文件、本地攝像頭、網絡視頻流等。
- 瞬間響應打開和關閉,無論是打開不存在的視頻或者網絡流,探測設備是否存在,讀取中的超時等待,收到關閉指令立即中斷之前的操作並響應。
- 支持打開各種圖片文件,支持本地音視頻文件拖曳播放。
- 視頻控件懸浮條自帶開始和停止錄像切換、聲音靜音切換、抓拍截圖、關閉視頻等功能。
- 音頻組件支持聲音波形值數據解析,可以根據該值繪製波形曲線和柱狀聲音條,默認提供了聲音振幅信號。
- 代碼框架和結構優化到極致,性能彪悍,持續迭代更新升級。
- 源碼支持Qt4、Qt5、Qt6,兼容所有版本。
7.3 視頻控件
- 可動態添加任意多個osd標籤信息,標籤信息包括名字、是否可見、字號大小、文本文字、文本顏色、標籤圖片、標籤座標、標籤格式(文本、日期、時間、日期時間、圖片)、標籤位置(左上角、左下角、右上角、右下角、居中、自定義座標)。
- 可動態添加任意多個圖形信息,這個非常有用,比如人工智能算法解析後的圖形區域信息直接發給視頻控件即可。圖形信息支持任意形狀,直接繪製在原始圖片上,採用絕對座標。
- 圖形信息包括名字、邊框大小、邊框顏色、背景顏色、矩形區域、路徑集合、點座標集合等。
- 每個圖形信息都可指定三種區域中的一種或者多種,指定了的都會繪製。
- 內置懸浮條控件,懸浮條位置支持頂部、底部、左側、右側。
- 懸浮條控件參數包括邊距、間距、背景透明度、背景顏色、文本顏色、按下顏色、位置、按鈕圖標代碼集合、按鈕名稱標識集合、按鈕提示信息集合。
- 懸浮條控件一排工具按鈕可自定義,通過結構體參數設置,圖標可選圖形字體還是自定義圖片。
- 懸浮條按鈕內部實現了錄像切換、抓拍截圖、靜音切換、關閉視頻等功能,也可以自行在源碼中增加自己對應的功能。
- 懸浮條按鈕對應實現了功能的按鈕,有對應圖標切換處理,比如錄像按鈕按下後會切換到正在錄像中的圖標,聲音按鈕切換後變成靜音圖標,再次切換還原。
- 懸浮條按鈕單擊後都用名稱唯一標識作爲信號發出,可以自行關聯響應處理。
- 懸浮條空白區域可以顯示提示信息,默認顯示當前視頻分辨率大小,可以增加幀率、碼流大小等信息。
- 視頻控件參數包括邊框大小、邊框顏色、焦點顏色、背景顏色(默認透明)、文字顏色(默認全局文字顏色)、填充顏色(視頻外的空白處填充黑色)、背景文字、背景圖片(如果設置了圖片優先取圖片)、是否拷貝圖片、縮放顯示模式(自動調整、等比例縮放、拉伸填充)、視頻顯示模式(句柄、繪製、GPU)、啓用懸浮條、懸浮條尺寸(橫向爲高度、縱向爲寬度)、懸浮條位置(頂部、底部、左側、右側)。
7.4 內核ffmpeg
- 支持各種音視頻文件、本地攝像頭設備,各種視頻流網絡流。
- 支持開始播放、暫停播放、繼續播放、停止播放、設置播放進度、倍速播放。
- 可設置音量、靜音切換、抓拍圖片、錄像存儲。
- 自動提取專輯信息比如標題、藝術家、專輯、專輯封面,自動顯示專輯封面。
- 完美支持音視頻同步和倍速播放。
- 解碼策略支持速度優先、質量優先、均衡處理、最快速度。
- 支持手機視頻旋轉角度顯示,比如一般手機拍攝的視頻是旋轉了90度的,解碼顯示的時候需要重新旋轉90度纔是正的。
- 自動轉換yuv420格式,比如本地攝像頭是yuyv422格式,有些視頻文件是xx格式,統一將非yuv420格式轉換,然後再進行處理。
- 支持硬解碼dxva2、d3d11va等,性能極高尤其是大分辨率比如4K視頻。
- 視頻響應極低延遲0.2s左右,極速響應打開視頻流0.5s左右,專門做了優化處理。
- 硬解碼和GPU繪製組合,極低CPU佔用,比海康大華等客戶端更優。
- 支持視頻流中的各種音頻格式,AAC、PCM、G.726、G.711A、G.711Mu、G.711ulaw、G.711alaw、MP2L2等都支持,推薦選擇AAC兼容性跨平臺性最好。
- 視頻存儲支持yuv、h264、mp4多種格式,音頻存儲支持pcm、wav、aac多種格式。默認視頻mp4格式、音頻aac格式。
- 支持分開存儲音頻視頻文件,也支持合併到一個mp4文件,默認策略是無論何種音視頻文件格式存儲,最終都轉成mp4及aac格式,然後合併成音視頻一起的mp4文件。
- 支持本地攝像頭實時視頻顯示帶音頻輸入輸出,音視頻錄製合併到一個mp4文件。
- 支持H265編碼(現在越來越多的監控攝像頭是H265視頻流格式)生成視頻文件,內部自動識別切換編碼格式。
- 自動識別視頻流動態分辨率改動,重新打開視頻流。
- 純qt+ffmpeg解碼,非sdl等第三方繪製播放依賴,gpu繪製採用qopenglwidget,音頻播放採用qaudiooutput。
- 同時支持ffmpeg2、ffmpeg3、ffmpeg4、ffmpeg5版本,全部做了兼容處理。如果需要支持xp需要選用ffmpeg3及以下。
08 輸入法
- 純QWidget編寫,支持任何目標平臺(親測windows、linux、嵌入式linux等),支持任意Qt版本(親測Qt4.6.0到Qt6.6),支持任意編譯器(親測mingw、gcc、msvc等),支持任意控件輸入包括網頁中的輸入控件。
- 調用極爲方便,pri文件調用形式,只要改成文件包含即可,例如pro文件中寫 include($$PWD/input2019/input2019.pri)。
- 界面清晰簡潔,UI美觀友好,高仿IOS輸入法,非常適合觸摸設備。
- 頂部滑動選詞+彈出漢字面板選詞,支持滑動。
- 具有記憶功能,之前選中過的詞語首先顯示,支持單個拼音多個漢字,自動調整優先級。
- 具有造詞功能,可以直接打開文件文件寫入自定義詞組,最高級別顯示。
- 支持數字小鍵盤,可選是彈出全鍵盤的數字面板還是小鍵盤。
- 多版面字符頁面,可以自行拓展各種字符展示,可用於多語言輸入。
- 支持Qt程序嵌入的瀏覽器中的網頁中的文本框等控件的輸入。
- 界面大小隨意設置,採用佈局自使用任何分辨率。
- 屬性控制數字輸入,例如需要文本框默認彈出的是數字則設置代碼 ui->txt->setProperty("flag", "number");
- 自由控制需要顯示輸入法和不需要顯示輸入法,當某些控件不需要彈出輸入法,只需要對應不需要彈出輸入法的控件設置屬性noinput爲真即可。例如ui->txt->setProperty("noinput", true);
- 界面自適應屏幕大小,輸入法彈出位置爲控件底部時,當超過桌面右邊或者底部時,自動調整位置。
- 實現了長按超過500毫秒重複執行按下的鍵的功能。例如長按退格鍵,不斷刪除。
- 英文、中文、數字字母、大小寫、特殊字符自由切換。
- 支持單拼、全拼、模糊拼音輸入,智能分頁算法,可任意翻頁查看漢字詞組。
- 默認自帶5種皮膚顏色,可隨意切換,用戶也可用QSS自定義皮膚。
- 谷歌內核的輸入法引擎,品質保證,字庫文件1MB,不依賴數據庫,資源佔用低效率極高。支持模糊拼音,比如nh=你好。
- 可選windows專有版本,支持外部程序輸入,比如輸入到記事本、QQ聊天窗口等。
- 整個輸入法代碼行數1000行左右,非常小,不會對程序增加大小造成負擔。
- 代碼結構極爲清晰,註釋詳細,非常容易閱讀和理解,同時也可以自行修改拓展自定義的需求。
09 數據庫綜合示例
- 同時支持多種數據庫比如odbc、sqlite、mysql、postgresql、sqlserver、oracle、人大金倉等。
- 一個數據庫類即可管理本地數據庫通信,也支持遠程數據庫通信等。
- 數據庫線程支持執行各種sql語句,包括單條和批量。
- 組件中的所有類打印信息、錯誤信息、執行結果都信號發出去。
- 集成數據庫通用翻頁類(負責具體處理邏輯),搭配分頁導航控件(負責外觀),形成超級牛逼的翻頁控件。
- 集成數據庫自動清理類,設定最大記錄數後臺自動清理早期數據。
- 集成自定義委託類,支持複選框、文本框、下拉框、日期框、微調框、進度條等。
- 同時支持Qt4-Qt6,親測Qt4.6到Qt6.2任意版本,任意系統和編譯器。
- 本組件無故障 360天7乘24小時 運行在至少上萬個現場,商業級別品質保證。
- 每個類都對應完整詳細的使用示例,註釋詳細,非常適合閱讀學習。
- 可以作爲獨立的程序運行,比如自動清理早期數據,同步數據到雲端。
- 全部線程處理,不卡界面,自動重連數據庫。
- 普通測試情況,sqlite數據庫,數據庫發生器每秒鐘插入1000條記錄約0.003秒鐘,同時自動清理數據類每秒鐘刪除1000條記錄約0.13秒,不同線程互不干擾。
10 皮膚生成器和精美UI界面
- 自帶20套精美皮膚樣式,其中包括黑色、灰色、扁平等。
- 皮膚生成器只需要簡單幾步就可以生成一套自定義的皮膚。
- 自帶了26種uidemo,非常漂亮美觀,涵蓋了主界面佈局、菜單切換等各種效果,總有一款適合你。
- 所有代碼和demo註釋都非常詳細整齊整潔,非常適合初學者學習。
- uidemo由簡入難,可以一步步學習下去,從入門到熟悉。
- uidemo從常規的客戶端到app端到觸摸端等都有,既有鼠標操作的也有觸摸操作的。
- 皮膚中的qss樣式表內容,覆蓋了幾乎所有的控件,非常適合學習每個控件的qss樣式如何設置,而且分門別類非常清晰。
- 自帶的quihelper類,集大成之所長,超級牛逼,內置了無邊框的消息框、錯誤框、詢問框、右下角信息框、輸入框、日期範圍選擇框等,支持倒計時關閉,集成圖形字體設置方法及根據指定文字獲取圖片,集成CRC校驗、獲取應用程序文件名、文件路徑、設置窗體居中顯示、設置翻譯文件、設置編碼、設置延時、設置系統時間等各種靜態方法,保你滿意。
- 支持任意Qt版本+任意編譯器+任意系統,可運行在win、linux、mac OS、嵌入式linux等各種系統上。
11 地圖綜合應用示例
11.1 省市區域地圖
- 同時支持閃爍點圖、遷徙圖、區域地圖、世界地圖、儀表盤等。
- 可以設置標題、提示信息、背景顏色、文字顏色、線條顏色、區域顏色等各種顏色。
- 可設置城市的名稱、值、經緯度 集合。
- 可設置地圖的放大倍數、是否允許鼠標滾輪縮放。
- 內置世界地圖、全國地圖、省份地圖、地區地圖,可以精確到縣,所有地圖全部離線使用。
- 內置了各省市json數據文件轉js文件功能,如有數據更新自行轉換即可,支持單個文件轉換和一鍵轉換所有文件。
- 內置了從json文件或者js文件獲取該區域的所有名稱和經緯度信息集合的功能,可以通過該方法獲取到信息用來顯示。
- 依賴瀏覽器組件顯示地圖,提供的demo支持webkit/webengine/miniblink/ie 多種方式加載網頁。
- 採用miniblink瀏覽器內核打通了Qt5.6及後續版本+mingw編譯器缺少瀏覽器模塊的遺憾,使得整個項目支持所有Qt版本,親測4.7到5.15等任意版本。
- 閃爍點遷徙圖等設置的點支持單獨設置顏色。
- 提供接口直接獲取點擊的點相關信息,方便程序聯動處理。
- 拓展性極強,可以依葫蘆畫瓢自行增加各種精美的echarts組件,做出牛逼的效果。
- 內置的儀表盤組件提供交互功能,demo演示中包含了對應的代碼。
- 函數接口友好和統一,使用簡單方便,就一個類。
- 支持任意Qt版本、任意系統、任意編譯器。
11.2 百度地圖
- 同時支持在線地圖和離線地圖兩種模式。
- 同時支持webkit內核、webengine內核、miniblink內核、IE內核。
- 支持設置多個標註點,信息包括名稱、地址、經緯度。
- 可設置地圖是否可單擊、拖動、鼠標滾輪縮放。
- 可設置協議版本、祕鑰、主題樣式、中心座標、中心城市、地理編碼位置等。
- 可設置地圖縮放比例和級別,縮略圖、比例尺、路況信息等控件的可見。
- 支持地圖交互,比如鼠標按下獲取對應位置的經緯度。
- 支持查詢路線,可設置起點位置、終點位置、路線模式、路線方式、路線方案(最少時間、最少換乘、最少步行、不乘地鐵、最短距離、避開高速)。
- 可顯示點線面工具,可直接在地圖上劃線、點、矩形、圓形等。
- 可設置行政區劃,指定某個城市區域繪製圖層,在線地圖自動輸出行政區劃邊界點集合到js文件給離線地圖使用。
- 可靜態或者動態添加多個覆蓋物。支持點、折線、多邊形、矩形、圓形、弧線、點聚合等。
- 提供函數接口處理經緯度解析成地址和地址解析成經緯度座標。
- 提供的demo直接可以單獨選點執行對應的處理比如路線查詢。
- 可以拿到路線查詢到的點座標信息集合,比如用於機器人座標導航等。
- 封裝了豐富的函數比如刪除指定點和所有點,刪除指定覆蓋物和所有覆蓋物等。
- 標註點彈框信息可以自定義內容,標準html格式。
- 標註點單擊事件可選 0-不處理 1-自己彈框 2-發送信號。
- 標註點可設置動畫效果 0-不處理 1-跳動 2-墜落
- 標註點可設置本地圖片文件等。
- 函數接口友好和統一,使用簡單方便,就一個類。
- 支持js動態交互添加點、刪除點、清空點、重置點,不需要刷新頁面。
- 支持任意Qt版本、任意系統、任意編譯器。
11.3 離線地圖下載
- 多線程同步下載多級別瓦片地圖,不卡界面。
- 內置多個離線地圖下載請求地址,自動隨機選擇一個發送請求。
- 下載地圖類型同時支持街道圖和衛星圖。
- 自動計算可視區域或者行政區域的下載瓦片數量。
- 下載的級別可以自定義範圍和選擇。
- 每個瓦片下載完成都發送信號通知,參數包括下載用時。
- 可設置下載最大超時時間,超過了則丟棄跳到下一個下載任務。
- 實時顯示下載進度,以及當前級別已經下載的瓦片數和總瓦片數。
- 下載過程中可以停止下載,下載完成自動統計總用時。
- 內置經緯度和屏幕座標互相轉換函數。
- 目前支持百度地圖,其他地圖比如谷歌地圖、騰訊地圖、高德地圖可以定製。
- 函數接口友好和統一,使用簡單方便,就一個類。
- 支持任意Qt版本、任意系統、任意編譯器。
12 屬性設計器組態軟件
- 自動加載插件文件中的所有控件生成列表,默認自帶的控件超過120個。
- 拖曳到畫布自動生成對應的控件,所見即所得。
- 右側中文屬性欄,改變對應的屬性立即應用到對應選中控件,直觀簡潔,非常適合小白使用。
- 獨創屬性欄文字翻譯映射機制,效率極高,可以非常方便拓展其他語言的屬性欄。
- 所有控件的屬性自動提取並顯示在右側屬性欄,包括枚舉值下拉框等。
- 支持手動選擇插件文件,外部導入插件文件。
- 可以將當前畫布的所有控件配置信息導出到xml文件。
- 可以手動選擇xml文件打開控件佈局,自動根據xml文件加載控件。
- 可拉動滑動條、勾選模擬數據複選框、文本框輸入,三種方式來生成數據應用所有控件。
- 控件支持八個方位拉動調整大小,自適應任意分辨率,可鍵盤上下左右微調位置。
- 打通了串口採集、網絡採集、數據庫採集三種方式設置數據。
- 代碼極其精簡,註釋非常詳細,可以作爲組態的雛形,自行拓展更多的功能。
- 純Qt編寫,支持任意Qt版本+任意編譯器+任意系統。