從零開始做3D地圖編輯器(四)(基於QT與OGRE)

四、QT基本知識

 

回到QT,先在VS中新建一個QT Application,項目裏面有幾個目錄:

1、              Form Files目錄,它裏面放的是使用QT designer製作的基於XML的佈局文件,雙擊它就會自動進入QT designer。

2、              Generated Files目錄,它裏面放的是一些臨時生成的文件,這些文件用來處理QT的信號和槽等機制。

3、              Resource Files目錄,它裏面放的是基於XML的資源文件,你可以在窗體裏面使用它們。

4、              Header Files和Source Files這兩個和VS默認是一樣的。

理解了目錄結構之後,先來試着寫一個Hello World,先把除了main.cpp之外的所有文件移除(使用QT designer會提高製作效率,但是會讓QT入門門檻變高)!打開main.cpp,僅保留以下代碼:

 

 

編譯通過。運行沒有任何反應,因爲還沒有往裏面增加任何東西。

 

在代碼中,Main函數是C語言的入口,之後申請的QApplication用來管理控制流和主要設置,這是核心,一定要保留。

按鈕是GUI中最基本的一個控件,先看看怎麼增加一個按鈕。使用按鈕控件必須先包含頭文件:

 

 

然後在QApplication a(argc, argv);return a.exec();中間插入下面代碼:

 

 

      代碼第一行是申請一個按鈕,並把按鈕的Caption標題設爲HELLO,第二行表示這個按鈕出現在屏幕座標(100,100)的位置,寬高爲(300,300),最後一行是顯示這個按鈕,你可以嘗試把它去掉看看效果(官方助手裏有QPushButton的更多資料,請自行查看)。

 

      編譯出來,發現屏幕上出現一個框,框裏面有一個按鈕,按鈕可以點擊,但是沒有任何反應,因爲還沒有爲這個按鈕增加任何的槽(Slot)。在MFC對控件的處理一般是通過事件機制,而在QT中是使用信號(Signal)和槽(Slot)機制,其實你也可以把它理解爲事件機制。

簡單理解信號其實就是輸入,而槽就是輸出,拿按鈕打比方,在一次點擊中,這個點擊,就是一個信號,而點擊後的反饋,就是槽。

每一個控件都擁有一些默認的Signal和Slot,這些都可以在官方提供的助手中查看。

 

綁定Signal和slot是使用靜態函數connect。函數原型是:

 

 

 

其中sender是發送者,而receiver是接收者,signal是信號,而method就是slottype裏面提供了幾種綁定方式,可以詳細查看助手。

      先看一個例子,在上面代碼中加入點擊按鈕後關閉應用程序的效果。很簡單,只需要在

 

 

後面加入

 

 

編譯運行,點擊後窗體關閉。

這是使用默認槽的例子,有時候需要點擊按鈕之後執行自定義的效果,那麼就需要使用自定義槽了。

 

 

下面是一個使用自定義Slot的例子,鼠標點擊按鈕之後,文本框文字會改變。

先加入一個QLabel控件,你先加入頭文件:

 

 

然後在connect前加入

 

 

    先嚐試編譯一下,結果label沒有出現在窗體裏面!它當然不會出現在窗體裏面,因爲我們只是對Button使用了Show()函數,嘗試加入label.show(),結果出現了兩個窗體,一個裏面有按鈕,另一個裏面有一個label。那麼怎麼把它們放在一起呢?

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/vickylh/archive/2010/05/18/5603613.aspx

發佈了13 篇原創文章 · 獲贊 1 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章