Aaron Liu的部落格,紀錄我的生活點點滴滴

Qt初心者之路::Hello World篇

| 2009年2月11日 星期三
這篇將以一個.Net慣用者的身份來探索Qt的世界。

不免俗地,從Hello World開始吧!



從Eclipse的File選單可以開啟一個Qt Gui Project,我將專案命名為「FirstQt」,選擇存放目錄以後,就可以開始開發了。如上圖,Eclipse和Visual Studio看起來不大像,但其實功能大同小異,左側欄的「C/C++ Projects」相當於Visual Studio的方案總管,「Qt C++ Widget Box」則相當於工具箱,在Qt的世界,Widget就相當於.Net講的Control。



畫面的中間一看便知是設計Windows Form的地方,可以將左邊的Widget拖到Form裡面放。對於Form的編輯,Eclipse能夠過雙擊Widget自動新增事件處理method,換句話說,它不像Visual Studio可以再拖好的Button上面點兩下,就自動跳到Button_Click的程式馬編輯器。如果要將事件處理交由系統預設好的一些事件處理函數處理(例如hide, repaint等),可以使用下方的Qt C++ Signal Slot Editor,如果要自己寫處理函數,則只要宣告為slot並按照特定的規則命名即可,後面會進一步說明。



至於Widget的屬性設定,可以在右側的Qt C++欄找到,Eclipes還會用顏色分類,就甘心ㄟ!



接下來開始建立一個Hello World程式,首先在Form裡面拖進一個Lable和一個Button,分將objectName改為「labTest」和「butTest」,並編輯一下text屬性,就成了下面的樣子。



接著我們要新增butTest按鈕的click事件。Qt將Event稱為Signal,Event Handler則稱為Slot,要新增一個signal和slot的對應,最簡單的方法就是將一個函數宣告為slot並且用特定的方式去命名。

首先,在宣告檔firstqt.h裡面,新增一段slot的宣告:

private slots:
void on_butTest_clicked();


此處必須要注意,slot函數的名稱,必須要遵照「on_發出事件的Widget名稱_signal名稱」來命名,Qt才會自動將此函數對應到該事件處理。

接著在FirstQt.cpp裡面實做剛剛宣告的on_butTest_clicked函數:

void FirstQt::on_butTest_clicked()
{
ui.labTest->setText(" Hello World!");
return;
}


這裡值得注意的是,Widget並不是像.net一樣直接宣告在Form(FirstQtClass物件)裡面,而是在ui物件裡面,我們可以透過ui物件去存取到其他的Widget。

如此,大功告成!按下Run即可執行程式了!



1 意見:

匿名 提到...

Sorry ...路過....

"此處必須要注意,slot函數的名稱,必須要遵照「on_發出事件的Widget名稱_signal名稱」來命名,Qt才會自動將此函數對應到該事件處理。"

其實slot的函數名稱沒有規定喔,名稱隨你高興喔~~
重點是connect()中的singal和slot的參數要完全一樣~~

Cheers!

張貼留言