[QT] Qt學習方法(丁林松總結)xK)ib!BdmJYr


      趁着有機會歇一歇關於Qt 的學習方法。  Qt 本來是在Linux 操作系統上開發出來的一種圖形界
面的解決方案, 當初只是在linux 上面運行, 它的底層庫是依賴XLib 這個庫的支持, 所以在瞭解Qt
之前最好是瞭解一下XWindow 的運行原理, 所以看到我這篇文章的學生應該注意聽講關於XWindow的運
作機制, 由於我們是學習嵌入式的, 所以對於嵌入式的Framebuffer 與XWindow 做一個很好的對比, 
對於我們學習起來會更順利, 當然這些都是在後期移植的時候需要掌握的。
  
     Qt 發展的確很快, 在三年前還沒有這樣好的集成開發工具 ,也就是IDE 環境。 當用設計器 Qt 

Designer 設計好一個界面後, 他是獨立的, 需要使用uic 單獨編譯成爲一個C++ 的頭文件的代碼, 
其中包含了許多聲明跟實例化, 現在看上去所有的細節已經被封裝起來了, 當然你不需要了解這麼多
的東西, 只需要完成框架的設計。 誰也沒有要求你掌握Qt 去開發內核級的應用程序。 
  
    總體看來開發Qt 程序要掌握框架, 內容很多, 這不必擔心, 因爲只要有框架, 我們總會有辦

法找到實現的方法, 教學過程當中應該我試圖讓學生掌握到框架的思維, 然後在框架搭建起來之後, 
去完成一些細節的功能,  一個項目, 可能牽扯到很多, 只要還是分類。  這裏的分類很有意思, 
你比如說, QString 這個類是經常使用的, 你可以考慮一下, QString 可以轉換成爲其他的類型, 
可以使用靜態聲明的方法來使用, QString 作爲一個對象應該是被深入到人的心裏當中。 
   說到這麼多內容, 我們要有一個方法去總結, 例如當使用一個標籤的時候, 英文單詞是Label , 
我們所要做的是就是在前面加一個Q ,即QLabel 這就是我們想找到的類, 其他的就很簡單了例如文件
對話框 FileDialog 他是一個合成詞, 每個頭字母大寫, 這是駝峯命名法的特點, 一樣的前面加一
個Q ,QFileDialog 就是文件對話框的類, 再舉幾個例子, QColorDialog  QFontDialog , 套接字 
QTcpSocket , QUdpSocket 如果你英文還不算差的話, 應該知道這些類是幹什麼用的了。 
  
    方法是最重要的, 有時候我們區分不了一些方法的原因是, Qt 中引入了槽的概念, 你會發現槽

也是一種函數, 按照方法的方式來調用。幫助文檔中很明確, 你需要了解到你什麼時候使用方法, 什
麼時候使用信號與槽. 這些事情都是約定俗成的, 當你相應某個事情的時候, 注意聽, 當要響應某個
事情的時候, 就需要信號跟槽。 當然信號跟槽可能是有限的, 你需要自定義的信號跟槽來完成你需要
的操作。  如果功能還沒有達到需求, 或者說, 還需要一些系統特殊的方法, 那就需要考慮到事件了
。 
    大概有些瞭解了, 之後是說信號跟槽。 我們可以用下面的方法來了解信號跟槽。
    if(某個信號發出了)
       就需要執行某個鏈接的槽
    也可以說成

       if(需要執行這個槽的時候) 
         信號必鬚髮出                                                                    
   只有信號發出了, 纔可以出發某個槽。  信號可能是系統定義的, 也可能是你自己寫的, 槽也一

樣。 這就出現了系統信號、槽, 與自定義信號槽。 我想在上課的時候講幾種方法的時候就可以表現出
來了。 認真聽聽就會了, 後期需要大量的信號跟槽的連接,  是通過一個項目完成的, 其中這個項目
的目的就是讓你瞭解信號跟槽的概念, 模塊開發, 瞭解 接口跟實現的有點, 瞭解怎樣擴展開發, 多
窗口, 美工, 軟件圖標, 發佈軟件, 跟逆向工程。
     看上去很多的樣子, 這都是建設框架, 其中每一個部分深入研究都有很路要走。 但是如果你一
旦入門, 開發起來會變得很容易, 而且繞有興趣。  
     Qt 的開發比較頭疼的就是如何去查找海量的文檔, 怎樣能夠從這麼多的文檔中定位自己要找的
東西, 並且這些東西還真的是你需要的。  文檔是開發中必不可少的, 即使是最懂得Qt 的程序員也
需要查看文檔, 沒有人去背誦那麼多的屬性跟方法,  包括長篇大論的枚舉類型, 跟全局宏, 全局宏
函數。 所以我們掌握的不是背誦所有方法, 而是查找的方法, 當你知道你現在需要一個什麼樣的類的
時候, 你就可以在index 中輸入你所需要的索引, 查找到相關的類, 在編程的過程中, 爲了更能體
現Qt 的快速開發跟C++ 的面向對象的特性, 建議還是使用方法的方式給對象設置屬性, 而拋棄構造
方法爲對象賦值屬性。  所以每個方法都有自己的意義跟特徵, 最主要的你需要掌握每個方法的參數跟
返回值, 有時候引用的參數會造成一些不必要的誤會, 但是你可以多嘗試。 例如QString 中有一些
轉換的方法:  toInt , toFloat , tolong 顧名思義就是轉換成爲數字來參與運算。  另外一種就是
set開頭的方法, 他們往往是設置一些屬性, 這些屬性還可以逆向操作, 所謂逆向操作就是設置屬性
跟獲得屬性, 有些方法則是一個單詞, 所以還是需要掌握一些英文吧。 
      談到了方法, 每個方法也有自己的屬性,C++ 中的 public  protected  private . public 
往往要求繼承類能夠繼承的屬性, 也就是在子類中要求能夠使用的, protected 大部分Qt 中是使用
的事件或者是虛函數, 完成事件的多樣性, 例如 closeEvent() ,mouseEvent() . 還有就是虛函數
,比如說QThread::run() 方法, 你需要在run 中寫入你想執行的操作, 才能構造出一個能夠執行的
線程。  這些分類比較明顯, 每個reference 幫助文檔的開頭都有目錄索引, 你要找的話直接點擊鏈
接就可以, 跳轉到你要找的內容, 這就縮小了查找的範圍。還有一種是static方法, 在學習C++ 的
時候都知道靜態方法有個好處就是對象不用實例化就可以使用的方法。 當然實例化的對象也能使用靜態
方法,這裏不做討論, 大部分的一些功能的實現Qt 似乎都做成了靜態方法, 舉出幾個例子: 
QFileDialog::getSaveFileName()  QMessageBox::information , QMessageBox::warning() 還有
QFontDialog::getFont()  顏色啊, 輸入文本框啊, 還有打印機什麼的, 都是使用這種靜態方法, 
知道了這些靜態方法後你就需要總結一下了, 這是作爲方法的記憶。 
      還有一個無從下手的就是, 當需要一個方法的時候, 你感覺上應該有這個方法, 但是在當下
這個類中查不到, 不要緊你需要進入它的父類, 如果還找不到, 那就如他的爺爺類^_^ 。 其實還有
一個方法, 就是點擊 list all property and method  這個鏈接, 一般都在文檔的最前面, 就可以
找到所需要的方法了。 找文檔如果找不到的話千萬別說自己的人品問題, 要想辦法從經驗中獲取方法
。 
      話說了這麼多, 如果你不堅持鍵入代碼的話也是徒勞的。 因爲代碼才能讓你有更好的組織方法
, 更好的反應能力, 跟更好的融入Qt 這個框架當中。 還有一件事情就是可以加快你打代碼的速度, 
以前在中石化工作的時候, 憋了很長時間, 突然早晨坐地鐵靈感到來, 在計算機面前半個小時打了
1000多行代碼, 問題解決了。 所以更多的代碼量能提高人的速度, 而且如果你代碼量增加起來的時
候, 你會認爲Qt 就是一種工具, 揮灑才情的工具。 
      uic  moc跟rcc 這個在課堂上看看演示就可以了,  這幾個編譯器爲我們做了很多。 讓我們節
省了大量的功夫。
      模塊開發是很重要的, 大部分的圖形程序是通過GUI 模塊開發的, 當然必須用到Core模塊例如
QApplication 雖然是使用在圖形界面上, 但是他是從QCoreApplication 繼承而來的, 而
QCoreApplication 則是Core模塊的, 你會發現當你建立一個工程的時候會自動的添加兩個模塊。 
另外我們Qt 中還會學到 network , sql , webkit , 與phonon模塊。  這種分模塊沒什麼難度, 就

是跟使用Qt 常用部件一樣, 只不過在工程文件中加入了模塊名稱而已。  有時候你希望你的程序十分
漂亮, 也就是在美工方面做到很好, 可能會使用QML語言, 這時候你必須加入declarative模塊, 這
部分模塊我也在摸索當中, 最主要的是QML 元素的理解, 翻譯了部分內容, 如果大家有興趣可
以給我索取。 
   還有一個問題在一些內訓的時候有人經常問到, Qt3 跟Qt4 有什麼區別。 區別可大
了,  例如Qt3 中頭文件是這樣的 qappliation.h  , 4 中是這樣的, <QApplication> 這是
一種不同, Qt3 中所支持的部件比較古樸, 說的好聽叫古樸, 不好聽叫難看。 但是Qt3中似乎有很
多比較好的功能的支持 例如 pop3 郵件服務, 到了Qt4 中就沒有了。 Qt3的QTableView 做的比較好
一些, 有直接的ui 方法, Qt 是提供了QTableWidget 作爲QTableView 的子類來使用, 增加了ui 編
輯的功能, 總體說來, Qt4 比Qt 3 有很多的進步, 雖然在第四版本中提供了向下兼容的模塊, 但
是還是希望大吉採取 4 版本來開發, 3版本太折磨人了, 3 沒有集成開發環境, 4 有比較好的繼承
開發環境, 如果你願意還可以把交叉編譯工具鏈加入進來。  
     移植過程
     
     在一直過程中, s3c 2410 開發板大部分是移植的Qtopia 4.3 也就是Qt 的 4.x 的嵌入式版本, 

一直到諾基亞收購了Trolltech 後Qtopia 已經放棄更新了, 雖然現在很多設備還在用這種版本。 匯
文使用的s3c2440  所以我們可以成功的一直 Qt/E 4.6.3 請對比着兩種版本的不同。  Qtopia 沒有
QSound 的類的支持, 所以提供音頻發聲的話肯定會出問題。 另外他們都是基於Framebuffer 架構的
, 所以移植 mplayer 會佔據全屏, 目前還沒有好的解決辦法。 只能在部件上加入一個比較大的
button, 來停止播放, 4.6.3 中包含了部分phonon模塊,但是內容不是很全面。 如果有更多需要你可以嘗試 6440 開發板, ARM11 能夠將Qt/E 4.7.x版本移植過去, 基本上所有的模塊你能想象到的都
可以支持了。  移植過程是一個漫長的過程, 如果你的機器很好還不錯, 不好, 那需要等上一個上午
或者一天, 來等待編譯完成, 中間可能會出錯, 大家不要灰心認真找到錯誤的原因, 修改掉就沒問
題了 。
    針對大家所說的內容, 我做了一個方法論的總結, 如果有其他的問題, 我還會寫一些文章來說
明  。希望對大家有用。  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章