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