有沒有一本書,專門講各種UI效果怎麼實現的,而不是講各種庫的使用辦法的?

那本C++ QT4編程,我看完了還是只會寫個簡單的窗口程序,以前看的java書,並沒有太多講GUI的內容,因此java我就只會拖控制項啊,反正目前只會拖控制項,重寫painEvent方法,發現那就不是人乾的事啊,比如我現在要做一個示波器的上位機,現在除了拖QWT的控制項之外,什麼都不會。。再比如我要加陰影,只有百度外,書上卻是沒有


同意你的想法,我確實感覺優質的GUI框架運用書籍,並不比優質的語言語法或演算法書更容易找到。以前Delphi流行的時候,還有幾本講得不錯的,現在真的不了解了,或許可以看看微軟官方那套書里,關於GDI+、SAML等桌面開發技術的書目。當然我只是舉幾個名詞,現在的windows開發體系我也不了解了,離開太久。

cocoa的書有一些,不過這幾年cocoa發展的很快,導致中文書進來往往顯得落伍。特別是今年處於swift擴張,objective c 退縮的換代時期,就更不容易找到一本特別跟的上潮流又很有深度的書了。


話說Qt4的文檔里如何用QML或者直接寫C++設置對象的形式構建GUI有很足夠的文檔了。如果不知道從何看起,你可以選擇去看看拖完控制項後編譯.ui產生的ui_xxx.cpp和ui_xxx.h,裡面記錄了你拖出來界面的每個細節,以C++代碼的形式。

至少我是覺得用QML訂製化UI的方便程度,基本上跟寫css差不多……


要做漂亮的ui最簡單的方法就是用html5那一套,然後整個restful服務跑起。各種效果都能搜到,示例代碼遍地都是。


我覺得你需要看計算機圖形學的東西。

然後,Qt的QtQuick控制項教程你可以看一下。它搞了個有陰影的波形控制項。


把握兩點即可。

第一點:掌握好QSS,qss是我見過各種語言框架中控制樣式界面最方便快捷的。

第二點:熟練QPainter的用法,內置的各種畫線畫圓畫矩形等方法,坐標平移縮放旋轉等處理,想要做出任何自定義控制項都不在話下,最後結合Qt內置的動畫機制,可以玩得團團轉。

順便貼幾張QSS控制的界面效果圖及QPainter自繪控制項的效果圖。


對於底層怎麼實現的我也不懂,比如前一陣子我就在糾結WPF的一些問題。。。

為了解決我的疑惑,現在已經暫時扔下WPF開始從Windows API一點點來。

在Windows下,界面GUI再NB,我就不信你不用Windows API。


python的PyQt:

PyQt/Tutorials

手把手:

PyQt4 tutorial

還有一本書: rapid gui programming with python and qt

這本書里有很多截圖和例子 很不錯 executuion上有點複雜 但是作為了解入門widgets還是不錯的,execution推薦前面那兩個tutorial


如果你需看具體的庫的用法是基本學不到什麼UI原理性的東西的,好像這樣的書也很少見,寫原理性的,主要是一個看得人少吧,本身基本的原理也不難,誰有那閑功夫去寫,而把一個庫里全寫出來量也很大,其實明白了基本原理,看哪個庫都一樣。

IMB開發論壇里到是有兩編魏永明早期寫的的MINIGUI的原理實現,可以找來看看。

我最早自己搞UI是接觸UCGUI的,搞明白了原理,再看到魏永明早期寫的的MINIGUI的原理實現,發現兩個庫的實現原理如出一撤阿!!後面自己也寫了一個在嵌入式設備上跑的UI庫,把自己實現的基本過程寫一下吧。

如果要了解和理解UI的具體實現,其實基本的原理是比較簡單的,自己也可以實現,比如你可以這樣來做一個,創建一個WINDOWS的窗體,裡面用畫布控制項布滿整個窗體。

現在看到的就是一個白板的東西,具體要畫什麼實現什麼就看自己的了,把這個畫布當成一個顯示器吧。

現在要實現一個自己的UI庫,要畫UI的東西,先簡單的,比如2D的圖形,比如點,線,框等等,而其中的畫點是最基本的,一個點就是一個像素點對吧,而其它的線框什麼的圖型都是用點畫出來的吧,這樣用在基本的畫點上面,我們也就實現了一個簡單的2D圖型庫了吧。

把2D圖型庫的實現的基本函數抽像出來,下一步畫出3D效果的圖形,這樣實現了3D的圖形庫了吧。

有了這些2D,3D畫圖形函數,畫出來只是靜態的圖形,得要它能有事件響應吧。

圖形庫一般都是事件驅動的吧,如果說滑鼠事件,一個單擊動作,從滑鼠設備是可以獲取位置和按鍵信息的吧,你的位置是單擊在哪裡?在你的白板上面你可能畫了很多圖形,比如2D的線,框或3D的像按鈕似的玩意,或你畫出了一個窗體,你要它們響應的的事件,那就需要遍歷這些圖形(一般一個圖形(控制項)在畫出來時,我們要記錄它)控制項,把這個滑鼠事件落在哪裡的,控制項有前有後,哪個在前面等,找到了控制項了。每個控制項在程序,比如是一個類,在創建它時,給它設定回調過程,比如單擊後的各種事件,比如最重要的像qt,mfc里控制項的repaint事件,這個事件就是重新畫控制項圖形的,像QT,MFC用戶用時,庫自己實現了它,要畫成什麼樣,當然用戶也可以重載它,自己要畫成什麼樣,就看自己的了。

哎,好累終於從坑裡跳出來了!所以你想畫出自己的東西,是什麼,你要了解QT庫的2D圖形庫的用法,它的控制項的事件這些東西。

具體的UI庫的控制項,事件等等還是很多東西的要寫的,和技術難度就沒多大關係了,當然我的意思不是說,一個優秀的庫也覺不是說沒什麼難度實現的意思。

這裡寫了一個如何實現一個UI庫的東西,可以看看!

自已實現一個UI庫 - jhting515 - 博客頻道 - CSDN.NET


我沒有找到非常緊密相關的書籍,可以研究QT、GTK、安卓。優點是這些都是開源的。缺點也很明顯,代碼量太TM大了,當你深入研究的時候,往往會不識"廬山"真面目,只緣身在此山中。雲里霧裡的,其實事情本質上並沒有那麼複雜。

我有這方面的經驗,我動手開發完成了一個類似QT的圖形庫


給部門內部解讀過幾個主流的開源庫,不適合通用性出版,累,沒動力。話說,如果連動畫效果都不會,這個程序員也沒有往上進階的潛力了。


推薦閱讀:

打字速度對編程的影響大嗎?
為什麼同為系統級編程語言,Rust 能擁有現代構建/包管理工具,C++ 卻不能?
為什麼C++調用空指針對象的成員函數可以運行通過?
在函數內new一個對象,如果作為引用返回,是不是就可以不用delete了?
為什麼一個空的class的大小是1個位元組?

TAG:Python | 圖形用戶界面 | QtC開發框架 | Java | C |