Qt Embedded是挪威公司的圖形化界面開發工具QT的嵌入式版本,它經過QTAPI與LinuxI/O以及Framebuffer直接交互,擁有較高的運行效率,並且總體採用面向對象編程,擁有良好地體系架構和編程模式. 編程
當在資源稀缺的設備上開發嵌入式應用程序時,Qt for Windows CE 和Qt for Embedded Linux經過調整一系列參數的開啓或關閉來內存及CPU的需求。這些選擇參數方法的範圍主要在編程風格,連接方式及內存分配。 緩存
着重注意的是,最直接節省資源的辦法是在編譯時去掉不須要的特性。詳細能夠見文檔中的fine tuning features部分。許多CPU和內存是經過ELF (Executable and Linking Format)連接進程,重大的節省能夠經過靜態編譯程序的方式實現;而不像是在實際執行中,採集與Qt庫有關的部分而且動態連接,全部的應用程序將被建立成一個獨立的執行文件,這個文件採用靜態方式連接到Qt庫上。 架構
這些將改善程序啓動時間和減小內存佔有率,但前提它會損害靈活實用的特性(一旦增長新的應用部分,必須從新編譯一個獨立的執行文件)和程序健壯性假如一個應用部分有bug,將危害到其餘的應用部分)。 ide
爲了將Qt編譯成爲一個靜態庫,在編譯時採用-static參數:./configure –static 爲了將應用程序套裝創建爲一個一體化的應用,應當設計各個應用做爲單獨的控件(或者控件集)並儘量地使用最少的代碼量在main()函數。而後,設計一個獨立的應用程序能夠提升其餘應用程序見交互的方法。Qt Extended platform就是採用典型的實例:它既可使用一系列動態連接執行建立,也能夠做爲單獨的一個靜態的獨立應用程序。 函數
需注意的時,程序仍將動態地連接標準C庫以及其它庫,由於在目標平臺上可能會有其餘的應用程序使用它們。 工具
當安裝最終客戶端應用程序時,這個方式不必定是個選擇,可是當在爲一個受CPU和內存限制的設備開發一個單獨的應用程序套裝時,這個選擇是十分有益的。void *operator new[](size_t size) { return malloc(size); } void *operator new(size_t size) { return malloc(size); } void operator delete[](void *ptr) { free(ptr); } void operator delete[](void *ptr, size_t) { free(ptr); } void operator delete(void *ptr) { free(ptr); } void operator delete(void *ptr, size_t) { free(ptr); }以上這些實例顯示了必要的代碼採用C的內存分配。
當運行時,Qt使用了後備存放區。好比,一個繪圖緩存,能夠減小閃爍和支持如重疊的圖形操做。 性能
通常,默認的流程是這樣的,對於每一個客戶端,將本身的控件傳入內存,同時,服務端負責將這些內容從內存中取出並在屏幕上繪製。可是有些硬件是衆所周知的,同時已經有嵌入式軟件的案例,這些對於繞開後備存放區是頗有幫助的,能夠運行客戶端直接地熟練地操做硬件。這裏有兩種方式來實現直接繪製: 開發工具
第一種方式是對每一個控件使用Qt::WA_PaintOnScreen窗口屬性,另外一種是使用了QDirectPainter類來保存幀緩存的區域。想獲取更多信息,能夠參考architecture 文檔部分的direct painting細節。 設計