Qt是圖形用戶程序框架,一個基於C++語言的框架,一個專注於用於圖形界面的框架,一個跨平臺的框架,一個藝術級別的圖形開發工具,這就是Qt。
Qt的優點:基於C++簡易,面向對象,具有優良的跨平臺特性,Qt架構健壯,性能強大,Qt使用起來簡便高效,Qt的開源軟件。
Qt編程特點:
1.初始化
在Qt應用程序中,首先要創建一個QApplicatioan對象,QApplication類負責圖形用戶界面應用程序的控制流和主設置,在main,cpp中定義如下:
intmain(intargc,char*argv[])
{
QApplication a(argc,argv);
………
}
QApplication包含在main()函數的時間循環體中,對所有來自Window系統和其他源文件的事件進行處理和調用,還包含處理應用程序的初始化和結束,並且提供會話管理。
在Qt應用程序中,不管有多少個窗口,QApplication對象只能有一個,而且必須在其他對象之前創建。
QApplication類中封裝了很多函數,其中包括:
系統設置:setFont() 用於設置字體
事件處理:sendEvent() 用於發送事件
GUI風格:setStyles() 設置圖形用戶界面的風格
顏色使用:colorSpec()用於返回顏色文件
文本處理:translate() 用於處理文本信息
創建組件:setmainWidget()用於設置窗口的主組件
2.窗口的創建
在Qt程序中,創建窗口比較簡單,只要在main.cpp文件中爲ApplicationWindow建立一個指針:
ApplicationWindow *mv=new ApplicationWindow();
ApplicationWindow是在Application.h中定義的類,他是一個QmainWindow的繼承類。
3.組件的創建
組件的創建需要調用相應組件的類,並在頭文件中包含此類的頭文件或者創建自定義類,繼承以後組件類的功能。
#include”qpushbutton.h”
Class hello::public Qwidget
{
……
}
Hello類繼承了Qwidget類的特徵,並加入了自定義的特徵功能,同樣需要在頭文件中包含此類的頭文件
在main.cpp的函數中需要創建hello類的實例,或創建QPushButton類的實例,纔可以使用
Hello h(string);
QPushButton hello (“Hello,world!”,0);
如果組件本身可以作爲主窗口,則無需設置主窗口,在上例中,下壓按鈕創建時其構造函數中的第二個參數爲0,表示按鈕所在窗口爲主窗口,不需要設置主窗口。否則需要調用QWidget成員函數setMainWidget()來進行設置。
窗體(Qwidget)
Qt擁有豐富的滿足不同需求的窗體(按鈕,滾動條等等),Qt的窗體用起來很靈活,爲了滿足特別的要求,他很容易就可以被子類化。
窗體是Qwidget類或其子類的實例,客戶自己的窗體類需要從Qwidget的子類繼承。
h.setMainWidget(&h);
組件創建時一般是不可見的,這樣的好處在於避免大量組件創建時造成的屏幕閃爍現象,要使組件可見需要調用QWidget類的成員函數show()來顯示組件
h.show();
4.事件
在X程序中,敲擊鍵盤,鼠標指針在窗口中的移動或鼠標按鍵動作等,都是事件
在Qt中提供了一種叫做回調的事件處理方式。它通過翻譯表,將事件映射爲相應的動作,當組件得到事件通知,就去表中找出相應的動作例程進行處理。這種機制需要應用程序註冊有關組件的回調函數或普通的事件處理函數,已分發循環Qt的時間
Qt事件的處理過程:QApplication的事件循環體從事件隊列中拾取本地窗口系統事件或其他事件,譯成QEvent(),並送給QObject::event(),最後送給QWidget::event()對事件進行處理。
其實在Qt程序中,事件處理的方式也是回調,但與以往所不同的是,事件的發出和接收採用了信號(signal)和插槽(slot)機制,無需調用翻譯表。利用信號和插槽進行對象間的通信是Qt的最主要特徵之一。
當對象狀態發生改變的時候,發出signal通知所有的slot接收signal,儘管他並不知道哪些函數定義了slot,而slot也同樣不知道要接收怎樣的signal
Signal和slot機制真正實現了封裝的概念,slot除了接收signal之外和其他的成員函數沒有什麼不同,而且signal和slot之間也不是一一對應的。