跨平臺界面開發(fā)工具Qt使用教程:GUI應(yīng)用程序中如何運(yùn)用觀察者模式
Qt(發(fā)音為“ cute”,而不是“ cu-tee”)是一個跨平臺框架,通常用作圖形工具包,它不僅創(chuàng)建CLI應(yīng)用程序中也非常有用。而且它也可以在三種主要的臺式機(jī)操作系統(tǒng)以及移動操作系統(tǒng)(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式設(shè)備,Android(Necessitas)和iOS的端口上運(yùn)行。更多Qt產(chǎn)品詳情點擊這里>>
觀察者模式
幾乎所有的UI工具包都具有一種機(jī)制來檢測用戶操作并對此操作做出響應(yīng)。其中一些使用callbacks,其他一些使用 use listeners,但是從根本上講,所有這些都受到觀察者模式的啟發(fā)。
當(dāng)可觀察對象想要將狀態(tài)更改通知其他觀察者對象時,將使用觀察者模式。以下是一些具體示例:
- 用戶單擊了一個按鈕,應(yīng)顯示一個菜單。
- 一個網(wǎng)頁剛剛完成加載,一個過程應(yīng)該從該加載的頁面中提取一些信息。
- 用戶正在滾動項目列表(例如在應(yīng)用商店中),并且到達(dá)末尾,因此應(yīng)加載其他項目。
信號和插槽
觀察者模式在GUI應(yīng)用程序中無處不在。Qt的創(chuàng)建是為了刪除此樣板代碼并提供一種簡潔的語法,而信號和時隙機(jī)制就是答案。
Qt沒有提供可供觀察的對象和觀察者,而是提供了兩個高級概念:signal和slot。
- 大部分時間,對象可以發(fā)送信號,以通知狀態(tài)改變的消息。
- 時隙是用于接受和響應(yīng)信號。
以下是我們著名的QPushButton類的一些信號和插槽示例。
- clicked
- pressed
- released
當(dāng)用戶單擊(按下然后釋放),按下或釋放按鈕時,將發(fā)送這些信號。
這是來自不同類別的一些廣告位
- QApplication ::quit
- QWidget :: setEnabled
- QPushButton :: setText
為了響應(yīng)信號,必須將插槽連接到信號。Qt提供了QObject :: connect方法。這種方式與兩個宏SIGNAL和SLOT一起使用
FooObjectA *fooA = new FooObjectA(); FooObjectB *fooB = new FooObjectB(); QObject::connect(fooA, SIGNAL (bared()), fooB, SLOT (baz()));
假設(shè)FooObjectA具有裸露信號,而FooObjectB具有baz插槽。您必須在兩個宏SIGNAL和SLOT中寫入信號的認(rèn)證和插槽。
備注 :基本上,信號和插槽是方法,可無論有沒有參數(shù),都從不返回任何東西。盡管信號作為一種方法的概念是不尋常的,但是時隙實際上是一種真實的方法,在其他方法中或在響應(yīng)信號時可以像往常一樣調(diào)用它。
在接下的文章中我們將講述如何通過信號和時隙傳輸信息。更多Qt開發(fā)工具點擊這里>>
QtitanRibbon、QtitanChart、QtitanNavigation、QtitanDocking、QtitanDataGrid在線訂購現(xiàn)直降1000元,歡迎咨詢慧都獲取更多優(yōu)惠>>