fltk,如同其名字所表達的:the fast light tool kit,乙個輕量級的gui開發庫。但這輕量級並不代表功能的羸弱,相反,fltk在具有基本的gui功能之外,還擁有一些特殊的功能,比如跨平台、內建 opengl功能、速度更快、尺寸更小、協議寬鬆等。當然,缺點也是有的,比如對於複雜的介面構件支援不夠,資源支援的不足等。但乙個工具如果使用的好,取其長而去其短,自然可以飛花摘葉皆可傷人;p
我選擇fltk 的過程還是比較曲折的,當初做arm下的gui開發,選擇的gui庫是minigui,乙個國內開發的介面庫。當時還支援類unix平台,對 windows的支援尚在開發中。由於需要尋找一些問題的解答,所以經常在其論壇上搜尋,從而知道了還有microwindow、nano、 qtembedded等嵌入型gui開發庫,但當時沒有太過注意。後來又開始轉向wince平台的開發,這一擱就是2年。再後來終於要做跨平台的開發,對具有跨平台的gui開發庫開始注意起來。
一開始的選擇是wxwidgets,但是研究了一段時間後發現不好解決的問題越來越多,終於放棄。最頭疼的就是c++類的事件傳遞,wxwidgets內部使用的是乙個類似mfc的方法,所有傳遞事件的類全部要從乙個根類繼承,這樣就導致建立的類和wxwidgets繫結過甚,復用性大大降低,同時由於wxwidgets的目標不僅僅是gui,造成其包含功能過多,其內部結構非常複雜,雖然是 opensource,但要若要修改其**還是很困難的。綜上所述,wxwidgets並不符合我的要求,從而被排除在外。
之後研究的qt,老牌的跨平台gui開發庫,工具很多,開發也很人性化,qtdesign很像delphi的介面開發方式,**帶有強烈的linux風格,但是看看附帶的庫檔案又實在讓人有些洩氣,尺寸大,發布麻煩。所以在試用了一段時間後還是放棄了。
在此期間,其實也看到過一些對fltk的介紹,但大多數對其評價不高,也就沒有注意。直到有一次偶然心血來潮,上http: 看了一下,發現fltk 似乎正對我的胃口,這才開始對其進行了深入的研究。經過一段時間的實際開發,個人覺得,對於跨平台和**簡潔而言,fltk是再適合不過了。
fltk的底層只提供一套完整的畫點、畫線功能,另外附帶了字型的顯示功能,但fltk對字型的支援還很粗糙,尤其對於非英文字符集而言,後面我會詳細說明。在基本的點、線功能基礎上,fltk完全自己實現了一套介面,比如button、label、edit、tab等,全部都是由基本的點線畫出。看到這,可能你會覺得這實在是屬於自己造輪子,吃力不討好。誠然,如果你只針對一種平台開發,這樣的做法不能帶來多少好處,還造成學習時間的拉長。但若要針對多個平台開發,這樣做的好處就很明顯了。首先是移植容易,只要針對目標平台實現基本的點線功能就可以實現**的移植,這可能是所有跨平台gui庫中最方便最直接的方案,目前ftlk支援macos、windows、linux(x-window)等平台,針對wince(主要是unicode的問題)和 plam 的開發正在進行中。其次是保持了介面的一致性,雖然qt、gtk等開發庫也具有這種功能,但是他們都需要一套基本庫的支援,無法做到系統尺寸的優化,而對於fltk而言,這卻恰恰是他的優點和長項。最後是**層次清楚、結構簡單,由於大部分的工作就是基於底層的點線功能進行自繪,所有很多**都是簡潔明瞭,很少費話。
底層之上是一套以fl_開頭的類,代表了各種gui構件,比如fl_window、fl_button、 fl_input等,使用起來很是容易。同時由於上面所說的,所有的介面構件都是畫出來的,因此在熟悉了這種方式後,生成自己的構件也是很容易的,反正是畫介面嘛,既然別人能做到,你也能做到,實在不行可以查閱源**進行學習。這些介面類的共同特點是輕量型、都擁有乙個draw(),只要在draw()裡實現自己的繪畫動作即可。
說到介面就不能不說其事件實現方式,對於fltk而言,使用的是最直接的方法:while(1){}。這也是很多人批評fltk原始的乙個原因。但仔細想想,其實這是最直接的辦法,不管是哪種平台,最終的事件方案不外乎是死迴圈和中斷,中斷的確具有很多好處,但只要while(1)能完成這部分的功能,那又有什麼關係呢。每個介面類都有乙個handle(int event),只要繼承這個成員函式,就可以在其中處理自己的事務。是不是很簡單?同時由於這樣的事件方式,造成fltk的重新整理速度很快,事件反應迅速,也算是個附帶優點了。現在大多數的開發庫都是採用oo方式的事件處理方式,但fltk卻採用了最原始的函式指標方式,也算是乙個異類,這可能和fltk的 unix背景有關,無論如何,這種方式還是需要一定的適應時間的,而且這種方式的優缺點也是屬於各花入各眼了,不過我本人還是很喜歡這種方式的,誰叫我比較原始呢#-_-
fltk產生於next環境,發展於x-window環境,所以對圖形加速的支援必然是選擇opengl。fltk 使用fl_gl_window這個類將opengl的基本功能囊括其中,只要在fl_gl_window的draw()裡glbegin/glend即可,基本的設定工作fltk全都做好了,對於我現在的系統要求簡直是最適合不過了。
fltk基於lgpl,對使用者的要求非常寬鬆: contrary to popular belief, it can be used in commercial software - even bill gates could use it! 所以開發者不需要擔心其專案的**問題。但是如果對fltk進行了卓有成效的修正最好還是能回饋給開發組,所謂我為人人,人人為我嘛。
說了一堆的好話,現在開始談談fltk的缺點。首先一條就是對非英文本型特別是中文的支援比較差,甚至是非常差。在windows平台下還好一點,因為在 windows平台下使用的是textout函式輸出字串,但是在x-window環境下就完蛋了,無法正確顯示中文,也不能呼叫輸入法進行輸入。從這點來說,fltk還是只適合一些封閉軟體的開發,對於通用軟體而言fltk並非是乙個好的選擇。但只能在windows平台下開發中文軟體也不是個辦法,要解決中文的顯示問題也不難,目前ftlk的穩定版是1.1.7,開發版是2.0,有人針對1.xx版本修改了乙個unicode版本,可以很平滑的支援漢字的顯示,但很遺憾,我沒有編譯成功過,如果誰編譯成功了可以給我來個信。2.0已經對非英文的支援進行了專門的開發,但目前還沒有release,在不久的將來應該可以完整的解決這個問題。目前,要麼等待,要麼就像我這樣,用點陣字型檔瞞天過海。具體方法因為還不夠成熟,就不公布了。
無論如何,fltk的目標還是針對嵌入式和封閉軟體的開發,所以複雜的介面並非其長項,如果想做出花哨複雜的介面,還是用其他gui庫比較好,fltk並不適合。
綜上所述,fltk的優點和缺點都是非常的突出,如何取捨還是自己決定吧。
python簡介 優缺點
優點 易於學習 python有相對較少的關鍵字,結構簡單,和乙個明確定義的語法,學習起來更加簡單。易於閱讀 python 定義的更清晰。易於維護 python的成功在於它的源 是相當容易維護的。乙個廣泛的標準庫 python的最大優勢之一是豐富的庫,跨平台的,在unix,windows和mac相容性...
Memcached簡介及優缺點
memcached做統一快取,用起來很爽。可他是怎麼工作及效能優缺點有哪些呢?memcached 是以守護程式方式執行於乙個或多個伺服器中,隨時接受客戶端的連線操作 客戶端可以由各種語言編寫 客戶端首先與 memcached 服務建立連線,然後訪問物件。儲存在 memcached 中的物件是放置在記...
Memcached簡介及優缺點
memcached做統一快取,用起來很爽。可他是怎麼工作及效能優缺點有哪些呢?memcached 是以守護程式方式執行於乙個或多個伺服器中,隨時接受客戶端的連線操作 客戶端可以由各種語言編寫 客戶端首先與 memcached 服務建立連線,然後訪問物件。儲存在 memcached 中的物件是放置在記...