激情综合丁香-激情综合六月-激情综合婷婷亚洲图片-激情综合图区-激情综合网五月

ESM8000主板圖形界面編程簡介

 2021-11-2     作者:黃志超         

1、概述


  英創公司推出的ESM8000主板搭載了NXP i.MX8M Mini Quad 64位異構處理器,包含了一顆主頻1.6GHz的四核ARM Cortex-A53和一顆主頻400MHz 的ARM Cortex-M4,同時還搭配了GPU(圖形處理單元)和VPU(視頻處理單元),對于嵌入式應用來說性能已經非常強勁了。ESM8000主板上預裝的系統為Linux-5.4.47,為了支持圖形用戶界面,使用了Wayland作為主板的窗口系統,并移植了基于Wayland的Qt,讓用戶可以通過Qt來開發圖形界面。


  Wayland可以看作是X11窗口系統的優化升級版本,按照目前的趨勢會逐漸替代X11成為Linux系統最主流的窗口系統。他們之間最明顯的區別是Wayland使用Wayland Compositor替代了X11中的X Server和Compositor,將這兩部分合二為一,從而省去了很多不必要的繁瑣步驟,提高了整個窗口系統的效率,可以參考下面的示意圖:


ESM8000主板圖形界面編程簡介.png

X11結構示意圖     Wayland結構示意圖


  Wayland還是采用的服務器-客戶端模式,同時提供了一套完整的協議定義圖形用戶界面和輸入設備管理。其中Wayland Compositor既要負責繪制窗口,同時也作為Server端,我們在ESM8000主板中已經移植了Wayland官方推薦的Weston(輕量級Wayland Compositor)。Weston會同時啟動一些Client,它們會負責系統全局的界面,比如窗口管理,繪制界面等操作。通過Client能夠方便的繪制、移動、管理圖形窗口,獲取鼠標鍵盤等輸入事件。在實際開發的過程中,可以選擇通過Client自己繪制,或是在Client上通過更高層的如Qt,GTK+這些widget庫等進行繪制。當繪制完后Client會通知Weston執行渲染操作,而ESM8000內部有一個GPU圖形處理模塊(支持OpenGL ES 2.0),Weston會自動調用內部的GPU對圖形渲染進行加速,這樣能夠有效的降低CPU負載。對于Wayland這里就不做過多的介紹了,感興趣的客戶可以參考:https://wayland.freedesktop.org/查看詳細的資料。


  ESM8000主板上移植了Qt 5.15.0,根據上面的描述可以了解到,Qt能夠作為Wayland的Client端進行繪制。所以我們推薦用戶在開發中直接使用Qt進行應用程序的開發,這樣開發應用程序更加快捷而且能夠容易的獲得統一的顯示效果。同時得益于Weston對ESM8000主板GPU的支持,在主板上運行的Qt程序也能夠通過GPU對圖形渲染進行加速。在ESM8000主板上支持標準的Qt C++編程以及QML腳本編程,用戶可以按照習慣選擇熟悉的方式來進行開發。下面我們就以一個使用C++編程的簡單界面來演示ESM8000主板上Qt程序的顯示效果。


2、Qt應用程序開發簡介


  首先我們通過QtCreator創建一個Qt Widgets Application,根據實際情況選擇路徑以及構建套件(Kit),這里選擇ESM8000的版本,如下圖所示:


ESM8000主板圖形界面編程簡介.png


ESM8000主板圖形界面編程簡介.png


  工程生成以后,會自動生成Widget類以及必要的C++代碼,我們可以在ui文件中,選擇拖入一些控件來查看效果,示例中主要加入了按鈕(pushButton)、下拉菜單(comoBox)以及顯示文字的標簽(label):


ESM8000主板圖形界面編程簡介.png


  在主板上運行效果如下:


ESM8000主板圖形界面編程簡介.png


  界面中最上面的工具欄是Weston自帶的weston-desktop-shell顯示的,用于負責界面全局窗口的管理(本質上還是一個Wayland Client)。如果不需要顯示這個工具欄,在/etc/xdg/weston/weston.ini文件中增加對shell的配置,就可以去掉這個工具欄,如下圖:


ESM8000主板圖形界面編程簡介.png


  保存該文件后重啟Weston就可以了:

  #> systemctl restart weston@root


  重新設置后,顯示效果如下:


ESM8000主板圖形界面編程簡介.png


  如果需要窗口全屏,并且不想留下Widget的窗口控制欄,可以對Widget進行全屏設置,代碼如下:


MainWindow w;  
w.showFullScreen();  
w.show();


  顯示效果如下:


ESM8000主板圖形界面編程簡介.png


  關于Qt的編程,在Qt的官網上也有詳細的說明和文檔,感興趣的客戶可以參考https://doc.qt.io/qt-5/qtexamplesandtutorials.html


3、總結


  從本文的介紹中,可以看到通過傳統的Qt C++的方式進行編程,對于嵌入式應用來說已經可以滿足大部分常規的界面設計需求,Qt常用的控件都能夠直接支持(如示例中按鈕、下拉菜單等)。


  但是目前應用中比較多使用到的視頻監控等內容,由于要涉及到解碼等操作因此需要使用VPU(視頻處理單元),而Qt中提供的C++類qtmultimedia因為無法調用VPU,會自動采用軟件解碼,這樣會導致效率很低并且占用大量CPU資源。所以這時需要使用到QML或者在C++代碼中調用gstreamer來進行處理,這部分操作我們會在后續的文章中詳細說明。

主站蜘蛛池模板: 久久99国产综合色| 成年免费大片黄在线观看一| 亚洲国产91| 亚洲成片| 国产成人在线网址| 国产成人久久精品激情91| 伊人成影院九九| 亚洲一区二区欧美| 国产在线91观看免费观看| 岛国a级片| 思思九九| 一及黄色| 亚洲女初尝黑人巨高清在线观看| 欧美一级www片免费观看| 黄色片免费在线观看| 久久精品免看国产| 亚洲热综合| 九九天天影视| 亚洲一级毛片中文字幕| 成人做爰网站免费看| 国产成人v爽在线免播放观看| 草逼网站| 国产精品爱久久电影| 欧美日韩国产精品综合| 91精品一区国产高清在线| 手机看片www xiao2b cm| 青青操精品| 国产乱弄视频在线观看| 蜜桃成人精品| 精品日韩在线| 日韩中文视频| 中文区永久区乱码六区| 日本一级片在线观看| 在线观看国产| 欧美亚洲国产成人高清在线| 性大片免费视频观看| 不卡中文字幕在线观看| 激激婷婷综合五| 日本亚洲一区二区三区| 一区二区三区欧美| 在线看片视频|