Qt的信號槽,一個老MFC的經驗


    最近在利用閑暇時間研究Qt,大概有3周了,看過了官網的white paper並瀏覽了一遍<C++ GUI Programming with Qt 4, 2nd Edition>。總的來說,感觸還是很深的,所以今天想寫點東西,作為對Qt初體驗的記錄。

 

    本人作為一個MFC老古董(如果你關注本博的話,你是知道的,汗~),發現研究Qt是一件非常令人賞心悅目的事情。那感覺,就像你逛完了集美家具城看到一堆國產風格的家具后突然走進宜家的賣場一樣。我並不是說宜家的家具有多么好,只不過宜家家具代表的北歐風格和家具的設計思路和國產的比較起來是那么的不同,讓人印象深刻。可能都是來自北歐的緣故吧,Qt的設計和宜家家具的設計都讓我感到了那股北歐的簡潔、質朴、某些地方又非常巧妙的風格。感謝北歐幾個國家的人民,為我們帶來了安徒生童話、Nokia手機、ABBA樂隊……當然還有Qt。

   

    喜歡Qt,當然還是從它的Signals & Slots開始。這個概念的提出是讓人非常欽佩的。如果你寫過10萬行代碼,仔細想一下,除了用於計算和處理事務的代碼外,其它的代碼都是在干什么的?沒錯,你寫了X個響應Windows消息的函數,調用了Y次成員變量的方法,執行了Z個回調函數……你不過是在通過不同的方法與對象或某段代碼溝通,讓它們去執行某些代碼而已。這個溝通的過程,有時候是非常麻煩的,甚至需要調整程序的構架和實現。在MFC中,當你不得不一次又一次繼承、修改Message Map,並為代碼的高耦合性和重復性頭疼不已時,是否想到過別的解決方案呢?對於純OO的編程來說,每個對象執行一些特定的操作,所有的對象通過溝通來共同執行所有的操作,完成整個軟件的功能。在Qt里,Signals & Slots是Objects之間完美的溝通方式,它允許所有繼承QObject的子類們隨心所欲的溝通,即使在不同的線程中。知道每次當我想到這里的時候是什么心情嗎?我要給Eirik鼓掌,大聲地,長時間地鼓掌……

 

    只有一個好的點子是不夠的,當你研究Qt源代碼時就會發現,為實現一個好的點子,通常要付出艱辛的努力。Let’s make things happen.不知各位聽到這句話時一般有什么反應。Haavard和Eirik即使在沒掙到1分錢而需要老婆養活的那幾年也能把Qt這個事業堅持下來,並堅持了將近20年。這份執着更讓人敬佩。有時候靜下心來想一想,我們中國人好像是太聰明了,有時候缺乏那種執着和愚鈍。當然,這跟國情也有關系,在中國,本土企業想做個世界級的ISV太難了,想盈利都很難(網游除外),更不用提開源軟件了。那些優秀的程序員和軟件從業者,難道中國真的沒有適合你們大展拳腳的土壤嗎?

 

    言歸正傳,再說回Qt的特色。與MFC對比起來,你會發現Qt的設計是那么的直白。很多地方的解決方案是你第一次就想到的那一種。感覺在Qt中,沒人會覺得你的想法簡單。關鍵在於你能把問題解決。經過了10幾年和無數個平台的洗禮,簡單的事情就沒那么簡單了。Keep It Simple & Stupid (KISS),有的時候,我們想得太多了。

 

    關於Signals & Slots我想再多說一句。在做木工活時,你知道一個好工具的重要性。它直接決定了你的工作是不是很辛苦,和能做出的東西是什么樣的。Signals & Slots在Qt中就是那個先進的工具,有了它,很多事情就不一樣了,整個Qt的構架也不一樣了。可以看出,對於一個公司或一款軟件來說,一個優秀的系統級程序員是一筆多么寶貴的財富。

 

    今天先寫到這里,我的下面幾篇文章將圍繞一個Qt程序展開,我會分幾步寫成一個類似Qt Demo的界面程序。在這個過程中,我會將Qt中的一些特色做個介紹,同時我會與MFC中的某些概念進行對比。有興趣的TX,請關注本博。

http://blog.csdn.net/superjoel/article/details/4889729


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM