您好,登錄后才能下訂單哦!
本篇內容介紹了“GUI引擎評價指標是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
github 上的開源 GUI 引擎至少有數十個,如何去評估它們的優劣,如何選擇你需要的 GUI 引擎?這個是艱巨的任務,每個人的需求不一樣,GUI 開發者的意圖也不同,很難找到統一的標準去選出最好的 GUI。QT 是最強大的,沒有之一,但也不一定適合你。
不管怎么樣,總有些指標可以提供有價值的參考,盡管這些指標在遇到不同使用的場景,不同的公司背景,不同的個人喜好,它們所占的權重也大不相同。但是并不能抹殺這些指標的價值,關鍵在于如何根據自己的需要調整它們的比重。
在 《這個開源的 6 千行 UI 框架,能打敗 QT,MFC 嗎?》 這篇文章里,諸葛不亮 的 37 問給了我極大的啟發,在開發 AWTK 的過程中,多次重讀這篇文章,這篇文章堪稱是 GUI 引擎開發者的指路明燈。
如果諸葛大俠不介意,為了活躍氣氛,我就把本文提到的指標稱為《諸葛不亮-李先靜 GUI 引擎評價指標》,把諸葛大俠放在前面,是表示對他的感謝,把我的名字放在里面,是由我承擔一些人的指責。
先開個頭,算是拋磚引玉吧。后續會不斷完善,希望大家也把自己選擇 GUI 引擎時的指標補充進來。
當你用他們的 GUI 時,他們是感謝你的支持,還在覺得你欠他們的呢?如果他們沒有心存感謝,你最好別用。否則,遇到問題時,你怎么能指望他們幫你解決呢?
是否有《API 手冊》、《使用手冊》、《常見問題》、《移植文檔》和《HowTo》,文檔是否在定期更新?
是否有簡單的入門示例、各種控件的的用法、完整功能的示例?
目錄名、文件名、類名、函數名、函數參數、局部變量名、全局變量名、注釋和縮進是否一致。
對于 GUI 引擎來說,支持多種編程語言是重要的,可以滿足不同的開發者的需要。對于使用者來說,GUI 是否提供了你需要的編程語言才是最重要的。
對于 GUI 引擎來說,支持多種平臺是重要的,可以滿足不同的開發者的需要。對于使用者來說,支持多種平臺也是重要的,你現在開發嵌入式系統,過段時間你可能要開發一個 APP 控制你設備,沒有必要浪費時間去學習不同的 GUI。
GUI 是否支持目標平臺的界面風格,是否提供跨平臺的運行庫,是否對平臺基本的原生功能進行了包裝,能否擴展新的功能。
所見即所得方式開發界面可以降低學習門檻,提高開發效率。
用該 GUI 本身開發的界面設計工具,可以驗證該 GUI 本身的功能是否強大和穩定。
另外用該 GUI 本身開發的界面設計工具,才能把界面設計工具做得易用。比如 TabControl 控件,在設計時可以切換頁面,只有用該 GUI 本身開發的界面設計工具才容易實現。
運行環境和開發環境往往不同, 如果每次都要部署一下才能看到效果,那開發速度一定上不來。
XML/JSON 是聲明式的語法,不但手工編寫比寫程序容易,也方便借助工具的支持。
對于嵌入低端嵌入式系統來說,XML/JSON 效率不高,最好的辦法是運行時轉換成高效的二進制格式。就像代碼一樣,編譯之前的代碼給人看,編譯之后的代碼給機器看。
XML/JSON 是聲明式的語法,不但手工編寫比寫程序容易,也方便借助工具的支持。
把界面風格從 UI 描述文件和代碼中剝離出來,也有利于后期的維護,畢竟界面效果是最容易變化的。
對于嵌入低端嵌入式系統來說,XML/JSON 效率不高,最好的辦法是運行時轉換成高效的二進制格式。就像代碼一樣,編譯之前的代碼給人看,編譯之后的代碼給機器看。
支持點陣字體嗎?支持矢量字體嗎?支持自定義字體格式嗎?支持只加載部分字體到內存嗎?配套工具完善嗎?
支持常見的 png/jpg/gif/bmp 格式嗎?支持 SVG 等矢量圖形嗎?能擴展支持新的格式嗎?
支持拼音輸入法嗎?支持軟鍵盤的 T9 輸入法嗎?支持硬鍵盤的 T9 輸入法嗎?支持語音輸入法嗎?支持手寫輸入法嗎?可以擴展支持新的輸入嗎?
是否內置提供支持 MVC、MVP 和 MVVM 等架構模式?是否支持 Vue、React 和小程序類似的開發方式?
是否支持高清屏?在 PC 上運行時界面變糊了,在手機上運行時字體變小了,都是不支持高清屏的特征。不支持高清屏就不用談什么跨平臺了。
矢量圖 API 是非常重要的,強大矢量圖 API 能實現很多神奇的效果。個人覺得 HTML5 Canvas 2D API 是最好的矢量圖 API。用 cairo、skia、agge 和 nanovg 這些開源的庫很容易實現類似的 API。
GUI 一定要提供一個抽象的接口,在不同的情況下,可以無縫的切換到最優的實現方案上。比如在嵌入式平臺用 agge,在嵌入式 linux 平臺用 cairo,在 PC 上用 skia 或 nanovg。
是否支持窗口動畫?窗口動畫的種類是否夠用?是否可以擴展自己的窗口動畫。窗口動畫的效率如何?窗口動畫使用是否方便?
是否支持控件動畫?支持那些控件動畫?是否支持自定義的控件動畫?控件動畫使用是否方便?控件動畫的參數有哪些?是否可以停止、暫停和播放控件動畫。
是否有你目前需要的控件和將來可能用到的控件。
有的 GUI 把控件分成葉子節點控件和容器控件,label、image、edit 和 button 都是葉子節點控件。這樣做靈活性很差,往 button 放個圖片或者動畫,往 label 里放個圖片,往 edit 里放一個"清除"/"查找"的 button,不是方便的事嗎,為什么要限制呢?
沒有一個 GUI 能夠滿足所有的需求,如果不支持自定義控件就悲催了。這樣一個簡單的需要,在有的 GUI 里卻需要修改 GUI 引擎的代碼,那就不好玩了。
通過布局參數控制控件布局,可以讓應用程序適用于不同大小的屏幕。是否支持布局參數,布局功能是否強大,是否可以擴展自定義布局?
如果控件支持自定義屬性,用戶可以存放自己的數據到控件中,可以避免使用全局變量,是個極為方便的特性。
如果控件支持自定義屬性,對 GUI 進行擴展也很方便,比如 AWTK-MVVM 的綁定規則就使用了用戶自定義屬性,如果將 AWTK-MVVM 移植到 Qt 就很容易,因為 Qt 也支持自定義屬性,要移植到 emwin 就麻煩不少。
label 是最簡單的控件,要做好也不容易。就像炒飯是廚師的基本功一下,label 就是 GUI 開發者的基本功。 支持 style(字體、顏色和對齊等各種參數)嗎?支持 unicode 的換行規則嗎?支持滾動顯示嗎?支持省略號顯示嗎?支持 bidi 算法嗎?支持動畫(比如打字效果和撥號中那種)。滾動顯示支持得到焦點時才滾動嗎?
當然把 label 和 scroll_label 分成兩個控件好點,實現簡單而且在低端平臺無需支持一下不必要的特性。總之,用戶需要時就要有這些功能。
支持旋轉和縮放嗎? 支持旋轉和縮放動畫嗎?支持居中、平鋪、x 平鋪、y 平鋪、九宮格、三宮格、縮放和按比例縮放等各種繪制效果嗎?支持顯示文本嗎?支持點擊嗎?支持勾選嗎?
支持 edit 不難,要做好卻不容易:支持拷貝、剪切和粘貼嗎?支持撤銷和重做嗎?支持通過鍵盤和鼠標選擇嗎?支持輸入法嗎?可以根據各種輸入類型自動選擇軟鍵盤嗎?可以自定義軟鍵盤嗎?可以指定獲得焦點時軟件盤是否自動開啟嗎?可以指定獲失去焦點時軟件盤是否自動關閉嗎?支持設置有效性檢查函數嗎?支持失去焦點時自動修復輸入值嗎?支持失去焦點時提示輸入有誤嗎?支持輸入提示嗎?支持輸入有變化時提示嗎?支持時間、日期和 IP 地址等格式輸入嗎?
是否支持長按?是否支持設置長按時間?是否支持重復觸發?是否支持圖標?是否支持子控件(如圖片和動畫)?
軟鍵盤使用 XML/JSON 描述嗎?可以定制軟鍵盤(鍵盤布局和風格)嗎?定制軟鍵盤需要修改代碼嗎?軟鍵盤可以用純方向鍵切換焦點嗎?
支持放入進度條、選擇框、按鈕、圖片和編輯器嗎?支持 View 和 Model 分離嗎?能支持千萬級別的數據嗎?
有些高手常用兩個指標來衡量 GUI 的功能:1. 能用它開發一個記事本嗎? 2. 能用它開發一個界面設計器嗎?如果支持 code editor,就可以用它實現一個功能更強大的記事本。
是否支持設置圓角半徑?是否支持對部分角設置圓角?是否可以分別設置上下左右的邊框?是否支持自定義的狀態?
彈出對話框時:是否支持對話框變暗?是否支持對話框動態變暗?是否支持對話框動態變模糊?是否支持新的高亮策略。
是否支持鍵盤切換焦點?是否支持上下左右切換焦點(有的設備只有方向鍵和確認鍵)?是否支持設置切換焦點的鍵值?
是否支持截屏?
是否支持按鍵音?不同的控件支付支持不同的按鍵音?是否支持觸屏震動?
是否支持字體整體放大?是否支持讀屏軟件?
有沒有提供跨平臺的存儲接口,如文件系統、配置信息和數據庫。
有沒有統一的資源管理接口?資源管理也是很麻煩的事情:比如圖片,它可能存放在 flash 中,可能存放在文件系統中,也可能放在服務器上;對于普通屏和高清屏需要加載不同的文件;不同的語言也可能需要加載不同的文件;同一個軟件在不同的系統上運行,可能要加載不同的格式,有的系統只能使用位圖,有的系統可以使用 png/jpg;圖片還需緩存,緩存還需要清理。所有這些東西,如果讓應用程序來處理,那將是一場噩夢!
強大的資源管理器,可以屏蔽所有這些細節,讓應用程序無需感知。比如,你需要"earth"這個圖片,你無需關心它的位置和格式,無需關心屏幕密度和語言的影響,系統自動加載最佳的圖片文件。
是否支持臟矩形算法、3 framebuffer 和 二進制格式。開發時使用 XML 方便程序員修改,運行時使用高效二進制格式提高運行效率。
是否支持常見的加速接口,如 STM32 的 DMA2D 和 NXP 的 PXP。廠家是否可以擴展自己的加速接口。
是否支持 OpenGL、DirectX、Vulkan 和 Metal 等。
最低能支持什么樣的硬件平臺?功能強大體積通常比較大,這對 GUI 的可配置性是一個極大的考驗。
1 秒啟動?5 秒啟動?還要等半分鐘?
是否支持 UTF-8 和 UTF-16 編碼?
是否支持 T9 輸入法?是否可以支持新的輸入法?
是否支持字符串翻譯?是否支持實時切換語言(不需重啟)?
是否支持圖片翻譯(既切換語言時,自動切換某些圖片)?
是否支持阿拉伯文字的雙向排版?
是否提供的跨平臺的編碼轉換函數?
是否有完整的單元測試?單元測試是否全部通過?
內存耗盡時是直接崩潰?還是讓應用程序能優雅的退出?
是否有內存泄露檢查機制?是否能用 valgrind 進行內存泄露和溢出檢查?
是否通過了 cppcheck、infer 或其它靜態檢查工具的檢查?
是否可以錄制用戶操作的事件,并通過重放進行壓力測試?
是否支持 Appuim,通過 javascript 等腳本自動化集成測試?
“GUI引擎評價指標是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。