初次踏上GUI編程之路算法
—— 個人Qt學習方法及對Qt認識的不斷轉變編程
-> 開始接觸GUI與開始接觸Qt:小程序
話說,我第一次看見「Qt」這一個名詞,好像是在CSDN網站的主頁上吧,由於CSDN好像在給Qt作宣傳,在主頁上佔了一欄的廣告,只是,這時,我還沒怎麼刻意去留意這個陌生的字眼。在我大二上學期中下期時,即大概是2011年的12月,因爲本身剛剛完成了彙編語言的入門學習,正要制訂下一個學習目標,因此,又開始找起了資料,同時,也再次開始爲本身的就業問題擔憂,因而,開始蒐集一些招聘單位的信息,這時候,在某些單位的校園招聘信息上看見在「C++研發工程師」這類的崗位上,有着幾個優先要求,會腳本編程的優先,熟悉閱讀英文文檔的優先,會圖形編程的優先,此時更加加深了本不是很知足於C++的Win32 Console Application的我對學習圖形編程的慾望,想起以前才糾結,想弄個俄羅斯方塊,想弄個坦克大戰,這些都汲及到了圖形編程,以前沒接觸過MFC,要從MFC基礎學起更是須要時間,最後仍是放棄了搞那些小程序的念頭了。另外,在蒐集資料時發現有一些單位上專門提到了這個圖形編程是Qt,因而,我開始對它有點好奇,開始蒐集資料,瞭解Qt,並將Qt與MFC, GTK+, wxWidgets這些開發工具進行比較,不過呢,開發工具的比較是最無聊的一項活動了,就像各類編譯語言C++, Java, C#這些比較同樣無聊,由於各有各特色,誰也不能說清什麼問題,每項工具或語言的存在,必有它的緣由,這個緣由,其中之一體現就是該工具或語言如今還未滅亡,只是,即便知道這個,我仍是去比較了,由於,仍是想選擇一個本身最感興趣而又不違背本身的學習目的的工具去學習,後來,我也忘了是受了哪些文章的影響了,找過不少文章,具體內容也幾乎忘光了,大概都是在說一些跨平臺特性,還有畫面好很差,還有封裝性怎樣之類的問題吧,不事後來仍是草率地決定了學習Qt了,由於,多天的資料蒐集,讓本身都以爲反感了,與其花這麼多時間在蒐集這些可有可無的東西,還不如快快上手去學習,因而,呃~差很少能夠能用狗急跳牆這個成語來形容這情況吧,由於本身有時候把本身逼得比較緊,再不把計劃定下來,只會讓本身更着急,有些時候猶豫不決還不如當機立斷。就這樣,我就開始與「Qt」扯上關係了。也在那段時間,把在網上查到的這句話「Qt是一個跨平臺的C++圖形用戶界面應用程序框架」經過信息發到本身的手機上,時不時拿出來看,試着把它背下來,以避免別人問起這個「Qt」是什麼時,本身連最基本的形容也不會這麼囧。網絡
0. 寫得有點亂,稍歸納一下如何 開始接觸GUI與開始接觸Qt 就是:數據結構
1. -> 曾在CSDN網看過Qt但直接無視其存在;架構
2. -> 制訂計劃查閱資料時發現本身有點想學界面編程;框架
3. -> 不當心發現Qt的存在;編輯器
4.-> 將Qt與其它開發工具做對比;函數
5.-> 草率決定學習Qt;工具
6.-> 開始Qt學習之路。
-> 逐漸瞭解Qt:
想學習一個東西,但是最慘的狀況莫過於無人指導吧,並且本身身邊又沒有一我的學習這些東西,因此,仍是得靠本身啊~由於我的喜歡對書自學,因而,上網找到了兩本書,分別是《零基礎學Qt4編程》(吳迪著)和《C++ GUI Programming with Qt 4》(第二版中文版)(Jasmin Blanchette及 Mark Summerfield著),這段時間,正好是個人大二上學期期末考緊張的備考時間,因此,就買了這兩本書後沒怎麼翻過這兩書了,一直忍着不讓本身這麼快看這兩書,直到將考試的東西準備充足了才放手給本身學Qt,因而,12月至1 月初,進入了大學應試備考狀態,將什麼要學習的東西都先放下了,在考試前,時間反而有點鬆了,該複習的都幾乎複習完了,因而,違背計劃,偷偷地學習一下,此次,沒有一開始就看Qt的這兩本書,而是接受了以前找過的網絡資料的建議,試試先用瞭解一下什麼是GUI及一些關於GUI編程須要的小基礎,因而,先大概看了一下前兩集的《孫鑫VC++視頻教程》,終於知道了什麼是API,什麼是句柄,什麼是消息,原來這些之前看起來陌生而深奧的東西也不是那麼難理解,只是一個很容易理解的概念罷了,特別是帶英文的那些,若是將英語翻譯過來,發覺原來就是字面意思,而後,從這兩集的視頻中,還知道了,原來,MFC裏面,好多隻是調用調用調用啊,除了調用仍是調用,從一個巨大的API庫裏面調用,這也多是我沒有深刻去學MFC的體會吧,話說,MFC全稱是:微軟基礎類庫,Microsoft Foundation Classes。也不是那麼的難記。雖然知道了這麼一點的GUI知識,但是,對於Qt,如今仍是陌生的,因而,我傻了,在沒有開始書本的學習前,我就已經開始找起寫Qt的軟件,幸虧,也沒有浪費不少的時間,走不少的彎路,找到了Qt Creater的SDK,不過下載安裝上了也對這個界面不是很熟悉,不過也沒有去弄它了,等考試結束後,看完了C語言後,開始學習了,首先選擇翻開的是《零基礎學Qt4 編程》吳迪這本書,由於這本書講的基礎真的好多啊,連背景的那些都講了,真是適合一個徹底的菜鳥,因而,花了數天的時間,慢慢把背景那些也認真看了,由於對這個也挺有興趣的,好像挺有趣的故事,而後,從這本書的第一章一直到第五章,介紹的都是基礎,雖然是好像相關性不大的基礎,不過仍是以爲挺有收穫的,由於,它詳細地介紹了Qt幾個版本,商業版,GPL,Qt的SDK包含的程序如Qt Library, Qt Designer, Qt Assistant, Qt Demo, qmake等的做用,也正是從這些學習再經過不斷地找資料,原來SDK翻譯過來就是軟件開發工具包這個意思,還有一些之前認爲很深奧的名詞,IDE,handle,那些意思~簡單地說,就是初步瞭解了學習Qt的背景和開發環境和需用工具了。同時也經過學習這個的過程,感受本身擴展了本身的視野了,一直以爲本身的知識面很窄。
0. 歸納,歸納,好像變成了固定格式了 逐漸瞭解Qt 的過程就是:
1. -> 因無人指導,果斷上網找資料買得兩本學習用書;
2. -> 未開始翻閱所購書,先開始看兩集的《孫鑫VC++視頻教程》,瞭解GUI基礎;
3. -> 開始翻開《零基礎學Qt4編程》學習一至五章知道了Qt的背景,IDE及Qt_GUI編程基礎。
-> 開始學習Qt:
完成了基礎的學習後,終於能夠期待已久的上機啦,上機編程,個人第一個程序仍是最普通的Hello Qt,嘿嘿,第一個程序照着書本敲,把它給敲出來了,無限的興奮,另外,又由於這時發覺,兩本書本的內容好像開始有重疊部分了,因而,將學習方法改變,看見兩本書都有Hello Qt,可是兩例子卻不徹底相同,因而,將兩本書的同一章節結合學習,以達到互補,強化的做用,這時的章節學習,也作了很詳細的學習筆記(在博客上有記錄),這時的學習方法主要是,分析代碼,從分析中學習語法,從分析中掌握Qt的程序設計思路。而後在編寫學習筆記時,展現程序功能,從功能分析程序,總結程序設計思路,摘錄(經修改)代碼。就以這樣的方法,學習了「走近Qt」一章, 從這一部分的學習中,開始熟悉Qt的設計,語法,基本概念。另外,也以一樣的方法學習「對話框」的內容,只是,此時,兩本書上都有使用到Qt Assistant的內容,喜歡純編程的我,不免也有點動搖,上羣問人,人人都說,用這個,方便,實際工做中通常都用,因而,也不得不把這個也稍學一下了,不過學這個並不難,比寫代碼要簡單,同時也經過這個工具看見了一些組件中的屬性還有有哪些組件之類的。就這樣,完成了兩Part的學習,這時,已是臨近新年了,再加上大做業沒完成,而看見下一Part的內容更有難度,因而,想轉一下型,先完成數據結構的大做業再繼續Qt的學習,果真,和改變了的計劃同樣,將數據結構的大做業完成了。
0. 仍是歸納,開始學習Qt:
1. 結合《零基礎學Qt4編程》和《C++ GUI Programming with Qt 4》兩書。
2. 對於前面兩部分的學習(走近Qt、對話框),分析代碼,從分析中學習語法級掌握Qt的程序設計思路。
3. 知道Qt有使用純編程的方式,也有使用鼠標用Qt Designer設計的方式,粗粗地學習了一下Qt Designer。
-> 嘗試轉換方法學習Qt:
個人寒假做業,也能夠當作是本身的項目經驗的C++編程小程序(家譜管理系統)完成後,再次再始Qt的學習了,可是發覺好像在兩本書中的下一章「主窗口」都沒有完整的代碼,這就有難度了,平時都是經過分析代碼反推思路這種學習方法的,再看見《零基礎學Qt4編程》這本書的後面章節好像安排得不昨的,能夠說是基本上沒有內容了,因而,快速把這書後面的與編程關係不大的理論知識認真地看看,看完了《佈局管理》,《Qt核心機制與原理》這些章節後,放下了這本書,這本書就變成了至關於帶我進門後就退休的書了。如今就剩下一本書了,非常糾結,好像越看就越痛苦,不知道是知識加深了仍是什麼緣由,另外,若是再繼續像以前兩個章節的學習方法的話,又好像進度太慢了,並且Qt的學習並不像我學C++那時用《C++ Primer Plus》那樣把那書完工了就掌握大部分知識了,不是的,由於瞭解到Qt有一個大大的library,而也正好在我前兩章的學習,第三章的學習查Assistant時才發現,原來,兩本書的內容,均可以從Qt Demo和Qt Assistant裏面找到啊,只是那個是英文版罷了~ 好吧,開始尋求出路了,看來這學習方法的確要改變了,因而,想過要把Qt Assistant中的內容都試試翻譯過來這樣學習,想過要尋找幾個Qt Demo中的例子製做以驅動本身學習,不過,後來,仍是放棄了這想法,由於感受這樣子學起來太不繫統了,這就是書本存在着特別的目錄的緣由吧,因而,再次開始資料搜索,想找出是否有人寫過本身一路上怎樣學習Qt的經驗之類的文章借鑑,找不到,不過倒一個不當心,把一個好的學習資料給找出來了《豆子空間的Qt學習之路》這是一篇篇博文組成的書,看上去簡單易懂,好像挺符合我的學習風格,稍瀏覽電子版的,嗯,決定使用,因而,嗚嗚,最貴的一次打印了,三毛一張,打了243頁的A4紙,再加上一個12元的封面,沒有比這學習資料花得更多錢的了,85元啊~ 最近在學習上花的錢是最多的。哈哈,不過也算是物有所值的了,花了四天的時間,將其有時上機有時瀏覽完了,不過,這本書的學習還沒完,以前,剛剛拿到這本書的時候,細看了一部分,將對話框的那些也上機了,發覺它內容不算了,也容易理解,並且上機好玩,以後,看了Event的東西,由於沒有實例,看得有點暈,不過也大概明白了Qt的事件機制了,以後,圖形一章,看這章時,我發覺,好像,我對這東西興趣不是很大,並且這樣子細看,好像也很快遺忘,因而,快速翻閱了後面的內容,發覺能夠轉變一下學習方法,先將這些內容每一個小節大概看一下,知道這Qt一共是由哪些東西組成,即,去了解整個Qt的部分架構,因而,朝着這個目標,在第四天的時候,也終於將整個這本書瀏覽了一次了,深有體會,發覺,有些東西與以前的東西有關聯,有些東西能夠獨立,有些東西現階段能夠經常用到,有些東西則在特殊狀況才能用到,再翻看《C++ GUI Qt4編程》一書的目錄,又好像有點理解爲何它這樣編排了,這個知識網絡大概就這樣了。忘了說了,在上一次找資料《豆子》時,我順便打印了一個Qt類的繼承表下來,由於真是太多類了,打印下來用的時候看能夠令本身的思路更加清晰。另外,經過此次的《豆子空間》的Qt學習我知道了,我有一些內容是必須地掌握好一點的,一些則能夠用到再查,不過能夠作個小模塊玩一下熟悉一下。各類的「對話框」是基礎中的基礎,有些M-V項目視圖也用到,因此這個必學,另外,「M-V項目視圖」也是很重要的東西,第二學,以後,關於一些容器,文件這些,跟C++的差別不大,能夠經過文字總結來鞏固,「圖形」,「國際化」,「拖放」這些關聯不大,能夠分別獨立拿個小例子來玩一下。我想,接下來的Qt學習方法,已經定好了,先完成剛剛所說的任務,上機,總結筆記,以後,再回看《C++ GUI Qt4編程》這本書。
0. 仍是歸納,開始學習Qt:
1. 發覺按照之前的分析代碼方法有問題,書本沒有完整代碼,學習方法得轉型,先放棄逐章代碼分析學習。
2. 開始快速將《零基礎學Qt4編程》跟直接編程關係不大的理論知識先學習(佈局管理、Qt核心機制與原理)。
3. 找資料,找得《豆子空間的Qt學習之路》,發覺內容較淺顯易懂。
4. 稍細看《豆子空間的Qt學習之路》對話框,Event的內容,後來決定先快速瀏覽完這整本書,瞭解架構。
5. 知道其實內容不少,難以一會兒所有細細掌握,開始注意即學即用的思想。
6. 雖然這樣認爲,可是,決定,先把最爲重要及基礎的東西得先掌握,另外,得注重實踐,使用Qt Assistant。
-> 學習Qt進入穩定階段:
有了這個想學之後,開始從新分析如今本身的Qt學習狀況:手上有三書籍,《零基礎學Qt》帶了我進門之後我就叫它退休了。這本書剩下我最值得看的地方是Qt Designer的使用(Qt Desinger是鼠標編界面的方法的軟件)。因爲現階段學習喜歡純手工編程編出界面,並且純手工對基礎的掌握也比較靠譜,當初看上Qt也有一個緣由是這個。學習方法過程當中,發覺能夠將《C++ GUI Qt4 編程》做爲後期鞏固書籍(其實裏面的所有內容都是來自Qt Assistant即MFC裏面的Library同樣的東西吧)《Qt學習之路》(豆子空間),已將其所有瀏覽,知道整體大概框架,即Qt裏面有些什麼東西能夠用,經常使用的通常知道在哪裏找了。
分析後對從新制定計劃,1.(一天或兩天)完成《圖形》一分塊的編程練習。 2. M-V架構項目視圖,估計得三天或五天,這個是很重要的東西,懂了這個就至關於或者能夠理解成相似Excel的表格之類的那些對數據的功能操做製做。3. 實際上,如今最缺的就是一點,將所學知識與Qt聯繫。即,如今Qt的東西只懂得把界面作出來,如何將Qt的界面與像我寫的家譜中的那些數據變化那樣輸入輸出呢?只要解決了這個問題,相信我就能對Qt的基礎有很大的信心了。也正因以上,有了下面兩點。4.作一個像辦公類,《成績管理系統》之類的軟件做爲實操項目驅動學習。5.作一個遊戲類,《貪吃蛇》《俄羅斯》之類的經典小遊戲。6. 我想當作完這兩個Qt,就將Qt編程方法掌握得差很少了。7. 最後是強化階段,固然,考慮到時間的問題,這步已經能夠忽略不走了,可能等真正找到工做後,穩定後,再將這一步走完,這一步是將《C++ GUI Qt4 編程》細看,細練一次,這本絕對是強大基礎的寶典,也是耗時間的東西。(話說,若是剛開始所有用這本書來學習的話,會很吃力,很耗時間啊,並不對徹底的菜鳥的目錄知識講解安排得很好)
當我將Qt語法基礎細化學習學習到項目視圖一知識時,突然有感,原來,使用Qt,不是要你有多麼多的基礎,它須要的是你臨時解決問題的能力,無論你基礎多麼的好,你也不可能把這些類庫裏面的所有東西用熟,即便用熟了,Qt的類庫也會不斷地更新,只有當想到問題,知道問題的解決須要到哪裏找答案時,這纔是學會了Qt,本身剛剛回顧了以前作過的筆記,目前爲止,本身的學習筆記作了七個部分的內容:
Part 01 走近Qt (2012.01.15)
Part 02 對話框(Qt)[2012.01.20]
Part 03 主窗口(Qt)[2012.02.10]
Part 04 各種對話框(Qt)[2012.02.11]
Part 05 簡易畫板的實現(Qt)[2012.02.13]
Part 06 項目視圖(Widget)(Qt)[2012.02.16]
Part 07 項目視圖(基本的M-V架構類)(Qt)[2012.02.17]
Part 08 自定義委託(Qt)[2012.02.18]
在各章學習時,讓我學習到了這些:
Part 01 讓我知道了Qt的最基本的窗口顯示的方法。
Part 02 對話框(Qt)讓我知道了佈局,信號/槽鏈接的基本方法。
Part 03 主窗口(Qt)讓我知道了主窗口,瞭解什麼是主窗口,如何爲主窗口添加最基本的組成部分功能,知道了動做是什麼,如何讓動做引起信號與槽,瞭解了工具欄與菜單欄的基本的按鈕的添加。
Part 04 各種對話框(Qt)讓我知道了在Qt或說是在window裏面的對話框能夠分出哪些基本種類。
Part 05 簡易畫板的實現(Qt)讓我知道了關於事件的一些應用,使用,知道了一個完整的小程序是哪何實現的,知道了大概關於QPainter類的應用。
Part 06 項目視圖(Widget)(Qt)讓我知道了一個視圖能夠分出哪些種類,實際上通常只有三種list,tree,table.知道了添刪數據的完成的大概方法。
Part 07 項目視圖(基本的M-V架構類)(Qt)讓我知道了m-v架構大概是如何實現的,知道了在這三種架構中,各功能大概會有哪些響應。
Part 08 自定義委託(Qt)瞭解自定義委託的含義,體會編寫委託類的方法。
學習自定義的model類時,頓悟了,突然以爲實際上所建立的類就是要與所繼承的類相對應上,所關聯的類,關聯上,而後,用到哪一個類的時候,再去認真地翻閱Qt Assistant,要知道這個類最主要能實現的功能,而後,去了解它的用法,瞭解它的信號會有哪些,它的槽有哪些,它的公用函數有哪些,固然,不能忘了它的父類,裏面也會提到它還能使用父類中的哪些功能。
以後,開始打算作項目驅動學習了,不是爲了鞏固熟悉哪些類,哪些基礎,而是要熟悉這種即學即用的能力,而是要讓你提升對這個軟件的類庫的使用方法。事件有不少,信號/槽也有不少,窗口的種類更是多,一會兒想熟悉是不可能的,只有經過不斷地查閱,不斷地解決問題,這樣纔是真正的學習目的。
0. 仍是歸納,學習Qt進入穩定階段:
1. 分析出哪些內容是須要重點學習的,制定學習內容大綱,對每部分展開學習。
2. 學習方法大多都是直接看《豆子空間的Qt學習之路》,分析代碼,嘗試脫書從新仿寫,作下學習筆記。
-> 開始嘗試直接製做小項目驅動Qt的學習:
2012年02月18日,開始嘗試尋找項目驅動學習,誰知,再發現了一個問題,你作哪一個項目,就決定了你哪一個方向,因此,若是不是想精通Qt的話,也沒有什麼必要去什麼類型的項目都作了,只是用到的時候作就好,今天看到關於「加農炮」的小遊戲,其實裏面只是用了三個類,而後,若是是作其它遊戲的時候,這三個類可能就不用用到了,也可能,這裏面還汲及到一點的遊戲編程的思想,不過,後來想了想,本身仍是不大須要,這個思想的話,可能跟辦公類的軟件也是差很少的,因而,我再次在Qt Demo裏面找起了實例,發覺仍是作一個文檔編輯器更新實惠,我想作了這個,就能夠知道各個功能是如何更加清晰地聯繫在一塊兒了,而後,還打算將這個文檔編輯器改一改,這裏面是一個窗口的,我想改爲能夠多窗口的,一個主窗口下包含多個打開的文件,想實現這個功能,而後,又找了一個相似功能的實例,但願這兩個實例能有所幫助。而後,又想,要不要作個像「家譜管理系統」還有「學生管理系統」之類的,不過,如今還不想作,想先把這個「文檔編輯器」搞定了,而後再去作那些,學生管理系統,看了一下題目,其實用到Qt的知識也不用不少,因此,仍是直接先搞定「文檔編輯器」若是再有時間的話,再把「學生管理系統」作出來吧。
因而,後來,我選擇了作一個「多窗口文檔編輯器」,花了十來二十天左右的時間,在2012年03月08日終於將這個小項目完工了(在我blog上有足跡),完工了,也充滿了興奮感。在使用小項目驅動學習的過程,我更加體會到了這種即學即用的重要性,由於,好多時候,你作這個東西時候,就得去掌握這個東西,Qt類庫這麼龐大,難以一下下就掌了它,若是想多掌握,那就多找幾個不一樣類型的小項目來驅動學習,在作這個小項目時,遇到問題,由於Qt仍是比較新啊,沒有像MFC那些網上一打就會一大堆的資料,因而,遇到問題,上幾個論壇去提問,非常糾結,基本上都是零或者是一的回答,因此,這時候更加知道了,本身能依賴的,只有Assistant和實踐試驗啦,因而,不斷嘗試,不斷分析,解決問題,把這個小小的程序給作出來啦。
0. 仍是歸納,開始嘗試直接製做小項目驅動Qt的學習:
1. 項目驅動學習,選擇本身感興趣的做爲題目,仿照多個例子,學會使用Qt Assistant的資料查閱。
2. 不斷地尋找不一樣類型的,或者本身想要的類型的方面的項目去練習。
-> Qt學習的小小的結束點:
在完成了本身爲本身佈置的小項目後,我想,這是一個對本身Qt學習,也是GUI編程的小小結束點吧,不過呢,相信這個GUI的學習是尚未結束的,由於,可能,之後仍是須要不少地方去用到它的,而這樣的學習方法,這樣的學習領悟,我是不會忘記的。其實,在作Qt小項目的時候,我很想快點把它結束掉,這是由於,那時候是剛剛開學纔開始作這個小項目,而後,剛開學兩週,咱們學校在搞那個電工實習的課,白天的時間是全沒有了的了,只有晚上的那麼一點點的時間,另外,本身如今還處於學習階段,想快點結束掉這個學習,而後進入下一部分的學習中去,是的,我知道,是有點浮躁的想法的,因此,也經常提醒本身得淡定,穩紮穩打纔是個人處事風格。好的,努力,接下來,繼續在計算機的海洋中飄蕩,繼續學習更多,更多,擴寬本身的視野,努力將本身所學到的一點一滴應用到生活,應用到這個計算機的專業領域,應用到跨計算機的各個領域中去!加油!Good Good Study, Day Day Up.
本人小菜,雖然文章不昨的,不過仍是怕有人喜歡轉載,只是仍是但願能保留我的的什麼什麼權,因此,若是想轉載的同志們,對大家有個小小的請求,請寫上:文章來自:http://blog.csdn.net/neicole
http://blog.csdn.net/neicole/article/details/7333524