Qt5的訊號和槽函式
1、 Qt5的訊號和槽函式
Qt Creator的幫助手冊中對訊號和槽函式(signals&slots)描述如下:
Signals and slots are used for communication between objects. The signals and slots mechanism is a central feature of Qt and probably the part that differs most from the features provided by other frameworks. Signals and slots are made possible by Qt’s meta-object system.
訊號和槽函式用於物件間的通訊,是Qt和其他開發平臺相區別的最主要的特性
Qt5作為c++的GUI開發類庫,其最具代表性的特點就是訊號和槽,這兩者類似於中斷和中斷處理函式呼叫的回撥(callback)函式,但具體實現在應用層,並且使用起來較後者更為方便。
2、訊號和槽函式(signals&slots)的用處
如前所述,signals&slots可以用於物件間的通訊。實際上常用於對GUI窗體上各種事件的及時處理,譬如:
a:文字框
文字框的內容被修改後會有一個名為valueChanged的signal,我們如果希望在文字框的內容被修改後把內容儲存到檔案裡,就可以將程式設計為“用一個slots函式(假設為funcA)和valueChanged這個訊號相關聯,每個valueChanged訊號被髮出的時候,都呼叫這個funcA將文字框中的內容儲存到指定的檔案裡”。
b:按鍵
每次某個按鍵按下後都呼叫一個函式funcB,假設按鍵按下後發出一個訊號signalB,這個時候funcB就是slots,signalB就是signals
c:自定義signal和slots
假設有兩個class,分別為學生Student和老師Teacher。希望每次老師拍桌子的時候學生就坐端正。用函式描述就是每次Teacher類的物件呼叫“拍桌子”這個函式的時候,所有的學生類的物件就呼叫“坐端正”這個函式。
在上面這個例子中,拍桌子函式被呼叫就會發出signals,學生物件將呼叫坐端正這個slots來響應
3、關聯訊號和槽函式
通常在接收訊號並呼叫槽函式的物件的類的建構函式(constructor)中,呼叫connect函式實現訊號與槽的關聯。
connect()函式的一種參數列如下所示:
connect(sender, &SenderObject::signalFuncton, this, &ReceiverObject::slotsFunction);
sender:傳送訊號的物件
&SenderObject::signalFuncton:訊號函式指標
&ReceiverObject::slotsFunction:槽函式指標
4、宣告訊號和槽函式
用程式碼實現2.c老師和學生的例子
老師的訊號:
class Teacher{
...
signals:
void BeatTheDeskSignal();
...
};
注:訊號必須是無返回值的函式。
學生的slots:
class Student{
...
private:
Teacher _teaA;
...
private slots:
void SitDown(int val);
...
};
學生的connect:
Student::Student()
{
...
connect(_teaA,&Teacher::BeatTheDeskSignal,this,&Student::SitDown);
...
}
5、發射訊號
signals在發出後由slots響應,使用關鍵字emit發射signals,譬如可以在Teacher中新增一個函式“拍桌子”,用來發射BeatTheDeskSignal這個signasl:
void Teacher::BeatTheDesk()
{
emit BeatTheDeskSignal();
}
至此,每次Teacher的物件呼叫BeatTheDesk,就會發射一個BeatTheDeskSignal訊號,對應的Student物件就會呼叫SitDown函式來響應。
相關文章
- 《Qt5:訊號和槽使用示例》QT
- QT槽函式獲取訊號傳送物件QT函式物件
- Qt學習第三篇(訊號槽函式的連線)QT函式
- 02_QT訊號和槽QT
- Qt入門(3)——訊號和槽QT
- Qt 5中使用lambda表示式連線訊號和槽QT
- Qt 訊號槽如何傳遞引數(或帶引數的訊號槽)QT
- C++訊號槽C++
- Qt 5 中的訊號槽QT
- 解析Linux訊號集操作函式Linux函式
- 訊號量函式 semget() semop() semctl()函式
- Qt之訊號與槽QT
- Qt Connect 訊號 槽QT
- QT之靜態函式傳送訊號QT函式
- PHP常用符號和函式收藏PHP符號函式
- 訊號與槽N對N
- linux系統程式設計之訊號(五):訊號集操作函式,訊號阻塞與未決Linux程式設計函式
- Linux 訊號signal處理函式--轉Linux函式
- MATLAB音訊訊號處理(一):函式簡易用法(audioread,sound函式)Matlab音訊函式
- 分割槽函式Partition By的基本用法函式
- PyQT5訊號與槽的連線QT
- linux系統程式設計之訊號(七):被訊號中斷的系統呼叫和庫函式處理方式Linux程式設計函式
- QT從入門到入土(三)——訊號和槽機制QT
- Qt 訊號槽傳遞指標QT指標
- PyQt4(簡單訊號槽)QT
- 語音訊號處理獲取 NFFT 的自定義函式音訊FFT函式
- C語言kill()函式:傳送訊號給指定的程式C語言函式
- linux系統程式設計之訊號(四):alarm和可重入函式Linux程式設計函式
- C++11 實現簡易的訊號槽。C++
- pyqt5中訊號與槽的認識QT
- Qt - 訊號與槽的第五個引數QT
- QT學習筆記1(安裝、建立和訊號與槽)QT筆記
- Qt入門(18)——使用訊號和槽連線控制元件QT控制元件
- Python函式引數前的單星號(*)和雙星號(**)的作用Python函式
- JavaScript 函式呼叫時帶括號和不帶括號的區別JavaScript函式
- PyQt4訊號與槽詳解QT
- QT 控制檯訊號與槽簡例QT
- VNPY 的EVENT事件作為 pyQT5的訊號觸發函式事件QT函式