(一)通用規則
- 除了極小的微型demo級別專案外,其余專案建議用pri分門別類不同檔案夾存放代碼檔案,方便統一管理和查找,
- 同型別功能的類建議統一放在一起,如果該目錄下代碼檔案數量過多,也建議拆分多個目錄存放,
- 比如就3-5個界面的專案,統一搞個form.pri存放這些界面,而當專案越來越大,界面可能也需要按照功能劃分,比如系統配置的表單放在一個目錄下,日志管理的表單放在一個目錄下,
- 很多通用功能,多個專案都會用到,可以考慮封裝成pri形式的模塊,俗稱輪子,不斷完善這些輪子,多個專案共享該模塊,一旦遇到BUG修復,只需要更改一個地方就行,
- 專案如果還更大或者專案組人員分配不同功能,可以考慮插件形式,插件一般會用到兩種,一種是普通動態庫形式的插件,必須和主程式放在一起;一種是Qt機制的插件,放在指定的目錄,
(二)全域組態檔
全域組態檔管理類 appconfig.h 用來讀寫對應專案的組態檔,
- 格式可以是ini、xml、json等,小專案建議ini,怎么方便怎么來,相當于將組態檔的值映射到全域變數,
- 組態檔如果配置項較多建議分組存盤方便查找,而不是全部放在一個大分組中,
- 讀組態檔的時候可以判斷組態檔是否存在、配置項是否缺失等情況,有問題則重新生成組態檔,避免惡意洗掉組態檔導致程式運行例外,
- 讀組態檔的時候可以填入默認值(qt組態檔類QSettings的value方法的第二個引數,set.value(“Hardware”, App::Hardware)),避免初始時候讀取不到節點而導致配置項值不符合預期值型別,
- 讀組態檔完成后可以重新判斷配置項的值是否符合要求,對值進行過濾和矯正,防止人為打開組態檔修改后填入了例外的值,比如定時器的間隔為0,要重新糾正設定為合法的值,
- 帶中文的初始值用QString::fromUtf8包起來,比如QString::fromUtf8(“管理員”),
- 帶中文的配置項要設定組態檔編碼為 utf-8,set.setIniCodec(“utf-8”),
(三)全域變數
全域變數管理類 appdata.h 用來設定專案中用到的所有全域變數,
- 比如當前用戶/系統是否鎖定等,這樣可以在任意的編碼位置使用該變數進行判斷處理,
- 可以將UI界面中的導航欄寬高、按鈕大小、圖示大小等變數放在這,系統啟動后判斷解析度等來設定不同的值,
(四)全域事件中轉處理
全域事件中轉處理類 appevent.h 用來中轉系統中各種跨多個UI以及多個類的事件,
- 此類必須是全域單例類,便于全域統一使用,
- 比如類a的父類是b,類b的父類是c,現在有個信號要發給類d,在沒有事件中轉處理的情況下的做法是將a信號發給b,b再發給c,c再發給d,如果父類嵌套層級越多越復雜,代碼越難管理,
- 將類a的信號發給appevent類,然后類d直接關聯appevent類進行處理就行,
- 專案越大,會越發現事件中轉處理的必要性,代碼清晰,管理方便,
(五)全域程式初始化
全域程式初始化類 appinit.h 用來做一些程式啟動后的初始化處理,
- 讀取組態檔,
- 設定全域字體,
- 設定全域樣式表,建議先讀取通用的樣式表,然后將額外的樣式表內容加到后面一起設定,
- 設定專案編碼,
- 設定翻譯檔案,可以加載多個,包括qt內置的qt_zh_CN.qm,用戶自己的翻譯檔案等,
- 初始化亂數種子,
- 新建專案中需要的目錄,防止沒有目錄無法保存檔案到目錄,
- 初始化資料庫,包括打開資料庫,載入基礎資料比如用戶表、設備表等,
- 啟動日志輸出類用來啟動日志服務,
- 啟動運行時間記錄類用來記錄每次軟體運行開始時間和結束時間,
- 關聯全域事件過濾器處理自定義無邊框UI拖動、全域按鍵處理等,
(六)全域通用類
- 除錯日志輸出類 savelog.h 用來啟動日志服務,可以將日志輸出到檔案或者網路列印輸出,
- 運行時間記錄類 saveruntime.h 用來記錄每次軟體運行開始時間和結束時間,
- 圖形字體類 iconfont.h 用來設定圖形字體圖示,
未完待續持續更新
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/262901.html
標籤:其他
