Qt 的入門我覺得可以直接從窗口開始,而不是什么“Hello World!”。因為Qt 是一個基於圖形界面的編程軟件,圖形界面編程是其核心所在。很久以前,那時候還是Shell編程,操作的只是文本,現在可以操作圖形界面,那么第一個“Hello”圖形界面就是能夠顯示窗口並通過按鈕將其關閉。
1 創建項目:New Project
2 選擇模板:應用程序>>Qt Widgets Application>>選擇
3 項目位置:設置項目名稱>>選擇項目位置>>下一步
4 構建套件:直接下一步
5 詳情:在基類中有三種類型。很顯然MainWindow是最大的一個,那么不管什么程序,直接選擇MainWindow就好了,沒必要在用什么Widget 或者 Dialog當基類。
6 匯總:單擊完成
這樣就創建了一個名為 Sample_Hello_World 的項目了。項目創建好了之后,軟件會自動生成必要的一些代碼。
在左側的項目列表中有四個文件:mainwindow.h/main.cpp/mainwindow.cpp/mainwindow.ui
mainwindow.h內容如下:
1 #ifndef MAINWINDOW_H 2 #define MAINWINDOW_H 3 4 #include <QMainWindow> 5 6 namespace Ui { 7 class MainWindow; 8 } 9 10 class MainWindow : public QMainWindow 11 { 12 Q_OBJECT 13 14 public: 15 explicit MainWindow(QWidget *parent = 0); 16 ~MainWindow(); 17 18 private: 19 Ui::MainWindow *ui; 20 }; 21 22 #endif // MAINWINDOW_H
使用時需要在public和private中間添加provate slots類成員函數:
1 private slots: 2 // ...
main.cpp內容如下:
1 #include "mainwindow.h" 2 #include <QApplication> 3 4 int main(int argc, char *argv[]) 5 { 6 QApplication a(argc, argv); 7 MainWindow w; 8 w.show(); 9 10 return a.exec(); 11 }
第1和第2行是頭文件包含,其中QApplication是包含了類Application定義的頭文件。相應的有QWidget、QDialog等頭文件。
第6行創建了一個QApplication對象,第7行新建了一個主窗口(MainWindow)部件“w”,第8行調用內建函數顯示窗口部件。而第10行則相當於Windows API中的消息循環,用於處理窗口中的“消息”與“動作”。
mainwindow.cpp的內容如下:
1 #include "mainwindow.h" 2 #include "ui_mainwindow.h" 3 4 MainWindow::MainWindow(QWidget *parent) : 5 QMainWindow(parent), 6 ui(new Ui::MainWindow) 7 { 8 ui->setupUi(this); 9 } 10 11 MainWindow::~MainWindow() 12 { 13 delete ui; 14 }
Qt中的“信號(SIGNAL)”和“槽(SLOT)”機制主要在這部分實現。槽函數需要在mainwindow.h中的private slots中進行函數原型說明,而信號和槽的連接放在第8行的下面。而槽函數的實現即函數體,則是放在第14行后面,即析構函數的后面。
mainwindow.ui是一個圖形設計界面:
你可以從左側拉入一些空間和部件放在窗口中,在右側設置相應的屬性。然后通過將部件與函數連接,實現信號與槽的連接。
可以直接單擊界面右下角綠色三角形執行按鈕,軟件會編譯運行當前的源程序。
下面是如何簡單的添加一個退出按鍵,並與相應的函數連接。
首先在UI設計窗口中的左側Buttom>>Push Buttom拉入主窗口,在右側的屬性欄中更改部件名稱為“PushButtom_Quit”。可以適當的更改按鍵的大小和標簽字體的樣式與大小。部件的名稱就是調用部件的接口。
接下來要做的就是將按鍵與函數連接起來。
在mainwindow.cpp中修改如下內容:
1 #include "mainwindow.h" 2 #include "ui_mainwindow.h" 3 4 MainWindow::MainWindow(QWidget *parent) : 5 QMainWindow(parent), 6 ui(new Ui::MainWindow) 7 { 8 ui->setupUi(this); 9 10 //如下為連接函數 11 connect(ui->PushButtom_Quit, SIGNAL(clicked()), this, SLOT(close())); 12 } 13 14 MainWindow::~MainWindow() 15 { 16 delete ui; 17 }
第11行中的close()函數為SLOT的內建函數,可直接調用。
(小技巧:當輸入一個函數名后,只打出左括號,會立即彈出參數表,部分函數會彈出可作為參數的內建函數,對象會彈出對象中的屬性列表。)
至此,一個添加了按鍵可實現單擊退出功能的窗口就完成了。執行后效果:
<參考文獻:C++ GUI Programming with Qt4, Second Edition. Jasmin Blanchette, Mark Summerfield>