官术网_书友最值得收藏!

  • 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入手,用實例理解信號和槽的實現。

主站蜘蛛池模板: 万载县| 沈阳市| 尼玛县| 正安县| 南木林县| 孝昌县| 定结县| 新闻| 永清县| 原平市| 昌图县| 麻栗坡县| 保山市| 上饶市| 申扎县| 宁德市| 松原市| 普陀区| 屏东县| 洛隆县| 大安市| 威信县| 晋江市| 库尔勒市| 科技| 灵寿县| 镇宁| 辰溪县| 嘉义县| 龙南县| 新营市| 中西区| 谷城县| 平安县| 都江堰市| 东乌珠穆沁旗| 兴宁市| 兴海县| 镇赉县| 时尚| 鄂州市|