儘管c++是一門強大且語法靈活的語言,實際上,許多程式設計師並不喜歡用c++開發gui,這是因為用c++來開發gui太過複雜。現存的一些c++ gui框架定義了一些規則,它需要你寫出一些死板的**才能執行,這總會導致一些問題,例如,讓你在深度的繼承層次中糾結,難以維護。現在,有另乙個選擇了,nana c++ library,乙個純粹的c++庫,讓你能完全發揮你的c++知識/技巧/手法來編寫gui,這是用c++開發gui的乙個重大的進步。類似標準庫和boost**風格,很「現代」,包含gui、執行緒以及檔案系統等函式和類。目前支援windows和linux x11平台,分為c++03和c++11兩個分支。
特性:
* make gui code easy to read/write/understand
* no need to #includesuch platform specified header
* flexible/easy to implement custom widget
* bidirectional languages supported
* thread-safe
* cross-platform
易學,易用
用nana建立乙個hello world程式有多易?
#include
#include
int main()
非常簡單,易懂的**。nana引入簡單和合理的概念使其保持簡潔。其次,不像那些由於命名約束和語法約束導致編寫死板**的框架,nana能使你的**更加直觀和可讀。例如,響應乙個事件。
#include
#include
void clicked(const nana::gui::eventinfo&)
int main()
函式clicked()的名字並不是強約束的,你可以給它任意取乙個名字。這比通過繼承某個事件介面來實現響應的方法更加直觀。在某些情況下,我們並不需要關心clicked()函式的的引數,例如上面那個示例。
void clicked() //無引數.
fm.make_event(clicked); //nana同樣允許!
非常靈活,使你的**保持簡單明瞭。這個特性同樣適用於函式物件。
什麼使nana如此靈活?
nana c++ library 不包含任何「額外的編譯器」來解析「特殊的語法」, nana使用100%的c++和模板技術使其強大和靈活。nana並非像其他那些基於模板的程式庫, 導致大量的**膨脹,並且要求程式設計師具有模板技巧。nana對 c++的新手來說也是非常友好的。
nana是乙個完完全全的c++風格的程式庫,能執行在visual c++ 7.1/gcc 3.4及以上的編譯器。如果你是c++專家,nana也允許你使用c++11中最新的特性lambda來處理事件。例如
fm.make_event();
or fm.make_event((const eventinfo& ei));
另外,如果nana與c++11中的std::bind一起使用,就能獲得更大的靈活性。
多執行緒簡單地說,nana是執行緒安全的,在不同的執行緒中訪問widget物件也變成平常的事情。這是乙個重要的特性,可以讓程式設計師很方便的把事件處理提交由其他的執行緒處理。例如
#include
#include
void foo()
int main()
));
fm.show();
exec();
} raii
有乙個重要的特性,展現在上面那些示例中。當form物件被建立,與它對應的視窗也會被建立,而這個視窗會一直隱藏著,直到呼叫了show()方法。當form物件被銷毀,與它對應的視窗也隨之關閉,這也符合c++的物件生命週期的概念。
跨平台程式設計
nana c++ library 是被設計成用來進行跨平台程式設計的,雖然第乙個版本的發布只能執行在windows上,但是現在這個庫基本上移植到linux(x11)平台上了。
最重要的特性:免費
這是乙個開源的專案,對於非商業應用和商業應用來說都是免費的。
給程式設計師新手的一些建議
前段時間因為實習生計畫花了很多時間做了實習生招聘的工作,產生的一些想法,寫在這裡。這次招聘過程中,我發現我們在校的學生有下面的這些特點 2 ok的解決問題能力。當問到演算法題時,我發現他們的問題解決能力還ok。我一般問1到2個中低難度的演算法題和1個基本的物件導向設計的題,都不難。我相信只要在學校裡...
給程式設計師新手的一些建議
前段時間因為實習生計畫花了很多時間做了實習生招聘的工作,產生的一些想法,寫在這裡。這次招聘過程中,我發現我們在校的學生有下面的這些特點 2 ok的解決問題能力。當問到演算法題時,我發現他們的問題解決能力還ok。我一般問1到2個中低難度的演算法題和1個基本的物件導向設計的題,都不難。我相信只要在學校裡...
給程式設計師新手的一些建議
前段時間因為實習生計畫花了很多時間做了實習生招聘的工作,產生的一些想法,寫在這裡。這次招聘過程中,我發現我們在校的學生有下面的這些特點 2 ok的解決問題能力。當問到演算法題時,我發現他們的問題解決能力還ok。我一般問1到2個中低難度的演算法題和1個基本的物件導向設計的題,都不難。我相信只要在學校裡...