- Qt編程快速入門
- 鮑忠貴
- 678字
- 2021-03-19 17:41:46
第3章 信號和槽
3.1 基本概念
在第2章中,我們已經接觸了信號和槽,當用戶觸發了一個菜單動作時,就產生了一個菜單觸發信號,主窗口用相應的操作響應信號,執行相應的操作,該響應操作即為槽。在Qt中,Qt的部件已經預定義了很多信號和槽,信號如triggered()等,槽包括close()、hide()、show()等,用戶也可以在類中增加新的信號和槽,以便實現特定的功能。
Qt中還有一種響應機制: 事件。Qt中的事件主要來自底層的窗口系統,如鼠標、鍵盤、定時器、網絡等,對事件的響應一般采用重載類的成員函數來實現,例如前面我們實現的mouseMoveEvent、TimerEvent等。從實現上,事件比信號和槽要更底層一些,例如單擊鼠標首先產生mousePressEvent,再在部件中產生triggered信號。
信號和槽遵循C++的基本語法,在定義信號和槽時,只需添加關鍵字slots和signals即可,例如:
… public slots: void setValue(int value); signals: void valueChanged(int newValue); …
要實現信號和槽的關聯,用connect操作實現,例如:
connect(aboutAct, SIGNAL(triggered()), this, SLOT(about()));
即把觸發“關于”菜單項的信號傳遞給窗口的“關于”操作,實現對菜單的響應。
信號和槽是Qt對象的重要特征,使用的信號和槽必須是QObject的子類,否則無法使用信號和槽來建立關聯。信號和槽是類型安全的,只要信號的參數在順序上是大于槽的參數,即可建立匹配,在響應的時候,系統自動匹配滿足槽的參數,放棄多余的參數。圖3-1給出了信號和槽關聯的示意,在Qt中,信號和槽也是松耦合的,可以各自在類中定義和實現,彼此在連接時進行參數匹配之外,沒有任何相關性。一個信號可以觸發多個槽,多個信號也可以連接至一個槽。需要注意的是,在槽中發射信號不要產生死循環。

圖3-1 信號和槽關聯示意圖
先不著急學習怎么用C++編寫信號和槽的代碼,既然信號和槽主要用于窗口部件間的聯系,那么我們還是從Qt Designer入手,用實例理解信號和槽的實現。
- Unity 2020 Mobile Game Development
- Clojure for Domain:specific Languages
- MySQL數據庫管理與開發(慕課版)
- 精通網絡視頻核心開發技術
- 人人都懂設計模式:從生活中領悟設計模式(Python實現)
- Mastering Predictive Analytics with Python
- C++對象模型詳解
- Hands-On Full Stack Development with Spring Boot 2.0 and React
- MongoDB Cookbook(Second Edition)
- Java Web開發基礎與案例教程
- Mapping with ArcGIS Pro
- Building Web and Mobile ArcGIS Server Applications with JavaScript(Second Edition)
- The Python Apprentice
- R High Performance Programming
- Computer Vision with Python 3