06.QT信號和槽-1

一、信號和槽概述

? ? ? ? 在Qt中,用戶和控件的每次交互過程稱為一個事件。比如"用戶點擊按鈕"是一個事件,"用戶關閉窗口"也是一個事件。每個事件都會發出一個信號,例如用戶點擊按鈕會發出"按鈕被點擊"的信號,用戶關閉窗口會發出"窗口被關閉"的信號。
????????Qt中的所有控件都具有接收信號的能力,一個控件還可以接收多個不同的信號。對于接收到的每個信號,控件都會做出相應的響應動作。例如,關閉按鈕所在的窗口接收到"按鈕被點擊"的信號后,會做出"關閉自己"的響應動作;再比如輸入框自己接收到"輸入框被點擊"的信號后,會做出"顯示閃爍的光標,等待用戶輸入數據"的響應動作。在Qt中,對信號做出的響應動作就稱之為槽
????????信號和槽是Qt特有的消息傳輸機制,它能將相互獨立的控件關聯起來。比如,"按鈕"和"窗口"本身是兩個獨立的控件,點擊"按鈕"并不會對"窗口"造成任何影響。通過信號和槽機制,可以將"按鈕"和"窗口"關聯起來,實現"點擊按鈕會使窗口關閉"的效果。

二、信號和槽的本質

1.信號的本質

????????信號是由于用戶對窗口或控件進行了某些操作,導致窗口或控件產生了某個特定事件,這時Qt對應的窗口類會發出某個信號,以此對用戶的操作做出反應。因此,信號的本質就是事件。例如:按鈕單擊、雙擊;窗口刷新;鼠標移動、按下、釋放;鍵盤輸入……

注意:

(1)我們對哪個窗口進行操作,哪個窗口就可以捕捉到這些被觸發的事件。
(2)對于使用者來說觸發了一個事件我們就可以得到Qt框架給我們發出的某個特定信號。
(3)信號的呈現形式就是函數,也就是說某個事件產生了,Qt框架就會調用某個對應的信號函數,通知使用者。
(4)在Qt中信號的發出者是某個實例化的類對象。

2.槽的本質

????????槽(Slot)就是對信號響應的函數。槽就是一個函數,與一般的C++函數是一樣的,可以定義在類的任何位置( public、protected或private),可以具有任何參數,可以被重載,也可以被直接調用(但是不能有默認參數)。槽函數與一般的函數不同的是:槽函數可以與一個信號關聯,當信號被發射時,關聯的槽函數被自動執行。
注意:

(1)信號和槽機制底層是通過函數間的相互調用實現的。每個信號都可以用函數來表示,稱為信號函數;每個槽也可以用函數表示,稱為槽函數。例如:"按鈕被按下"這個信號可以用clicked()函數表示,"窗口關閉"這個槽可以用close()函數表示,假如使用信號和槽機制-實現:"點擊按鈕會關閉窗口”的功能,其實就是clicked()函數調用close()函數的效果。

(2)信號函數和槽函數通常位于某個類中,和普通的成員函數相比,它們的特別之處在于:

? ? ? ? ①信號函數用signals關鍵字修飾,槽函數用public slots、protected slots或者private slots修飾。signals和slots是Qt在C++的基礎上擴展的關鍵字,專門用來指明信號函數和槽函數;

? ? ? ? ②信號函數只需要聲明,不需要定義(實現),而槽函數需要定義(實現)。

????????信號函數的定義是Qt自動在編譯程序之前生成的,編寫Qt應用程序的程序猿無需關注。這種自動生成代碼的機制稱為元編程(Meta Programming),這種操作在很多場景中都能見到。

三、信號和槽的使用

1.連接信號和槽connect

????????在Qt中,QObject類提供了?個靜態成員函數connect(),該函數專??來關聯指定的信號函數和槽函數。

QObject類:

????????QObject類是Qt內置的父類,Qt中提供的很多類都是直接或者間接繼承自QObject類。

connect()函數原型:

connect (const QObject *sender,const char * signal ,const QObject * receiver ,const char * method ,Qt::ConnectionType type = Qt::AutoConnection )

connect()函數參數說明:

  • sender:信號的發送者;
  • signal:發送的信號(信號函數);
  • receiver:信號的接收者;
  • method:接收信號的槽函數;
  • type:用于指定關聯方式,默認為AutoConnection;

代碼示例:在窗口中添加一個按鈕,點擊按鈕時窗口關閉

2.查看內置信號和槽

? ? ? ? 系統內置的信號和槽,通常都是通過官方QT幫助文檔來查詢,例如查詢按鈕的信號:

(1)在幫助文檔中輸入QPushButton來進行搜索

(2)結果發現并沒有找到有關信號的內容,那么繼續搜索其父類QAbstractButton中進行尋找

(3)其中就能找到Signals相關內容,同理如果父類中沒有找到相關信息,可以繼續向父類的父類一直向上尋找

3.連接信號與槽方式

3.1通過connect手動連接

? ? ? ? 我們也可以去定義一個自己的槽函數來完成自己想要的操作,然后通過connect函數將對應控件的對應信號與槽函數進行綁定即可。

3.2 通過命名規則自動連接

? ? ? ? ①右鍵控件,選擇轉到槽,會自動彈出窗口顯示可以選擇的信號:

????????

? ? ? ? ②選擇對應的信號后,會自動跳轉到代碼編輯頁面,且已自動創建好槽函數:

? ? ? ? 我們此時只需要直接在函數中,編寫我們所需要的實現即可。

? ? ? ? 此時可能會發現沒有connect函數進行綁定,但卻能實現對應操作,是因為QT還可以通過函數名進行自動綁定槽函數,只需要我們在定義槽函數名時,滿足自動綁定的規則即可。

槽函數的命名規則為 on_XXX_SSS :
1、以"on"開頭,中間使?下劃線連接起來;
2、"XXX"表?的是對象名(控件的objectName屬性);
3、"SSS"表?的是對應的信號。
例如:"on_pushButton_clicked()",pushButton代表的是對象名,clicked是對應的信號

注意事項:

1.如果是代碼手動實現,更建議顯示的使用connect進行連接,不要依賴命名規則自動連接

2.如果是ui布局使用,根據實際運用情況對功能沒有影響的情況下,可以選擇自動連接方式

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716881.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716881.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716881.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java練習(第5天)【總結】在字符串中尋找特定的字符(5種方法)

問題描述:在字符串中尋找特定字符 1、第1次出現位置 實現函數原型: int indexOf(char c) Java代碼: import java.io.*; public class Way_1 {public static void main(String args[]){String str "Geeks for Geeks is a computer s…

疲勞駕駛監測報警攝像機

疲勞駕駛是導致交通事故的重要原因之一,為了提高駕駛安全性,科技日新月異,疲勞駕駛監測報警攝像機因其先進的技術而成為關注焦點。 疲勞駕駛監測報警攝像機采用先進的人臉識別技術和人工智能算法,能夠實時監測駕駛員的狀態。通過對…

基于Python淘寶水果銷售數據可視化系統設計與實現(Django框架) 研究背景與意義、國內外研究現狀

博主介紹:黃菊華老師《Vue.js入門與商城開發實戰》《微信小程序商城開發》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學生畢業設計教育和輔導。 所有項目都配有從入門到精通的基礎知識視頻課程&#xff…

文件操作和IO(2):Java中操作文件

目錄 一、File的屬性 二、File的構造方法 三、File的方法 四、代碼示例 1、getName,getParent,getPath方法 2、getAbsolutePath,getCanonicalPath方法 3、exists,isDirectory,createNewFile方法 4、createNewF…

龍蜥 Anolis OS8.4 設置IP

1、配置文件路徑 /etc/sysconfig/network-scripts/ [rootlocalhost ~]# cd /etc/sysconfig/network-scripts/ [rootlocalhost network-scripts]# ls ifcfg-ens32 進入配置文件路徑后,展示。ifcfg-ens32這個不同的服務器不一樣,本次虛擬機所對應的是ens3…

掌握AI文本生成的關鍵:深入解析Prompt、Token和Completions

在當今時代,人工智能(AI)技術的迅速發展已經成為我們生活和工作中不可或缺的一部分。特別是在自然語言處理(NLP)領域,生成式AI技術,如GPT-4和ChatGPT等,已經成為熱點。為了更好地理解…

2. vue 工程創建

1. 基于 vite創建 官方文檔: https://v3.cn.vuejs.org/guide/installation.html#vite vite官網: https://vitejs.cn 使用vite創建的優勢: 開發環境中,無需打包操作,可快速的冷啟動。輕量快速的熱重載(HMR)。真正的按需編譯,不再…

CSS列表屬性

CSS列表屬性 列表相關的屬性&#xff0c;可以作用在 ul、ol、li 元素上。 代碼如下&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>列表相關屬性</title><style>ul {/* …

牛客網C++專項題目整理(1)

1. 若有定義語句:char s[3][10],(*k)[3],*p;則以下賦值語句錯誤的是 1.p s; 2.p k; 3.p s[0]; 4.k s; 答案&#xff1a;124 char s[3][10] s 是數組指針&#xff0c;類型為char (*)[3]&#xff0c;所指向的每個數組長度為10; char (*k)[3] k是一個數組指針&a…

國內哪個工具可以平替chatgpt?國內有哪些比較好用的大模型gpt?

我自己試用了很多的平臺&#xff0c;發現三個比較好的大模型平臺&#xff0c;對普通用戶也比較的友好的&#xff0c;而且返回內容相對來說&#xff0c;正確率更高的&#xff0c;并且相關場景插件比較豐富的國內廠商。 本文說的&#xff0c;是我自己覺得的&#xff0c;比較有主觀…

拆幀神器:深度解讀Netty中的DelimiterBasedFrameDecoder()

歡迎來到我的博客&#xff0c;代碼的世界里&#xff0c;每一行都是一個故事 拆幀神器&#xff1a;深度解讀Netty中的DelimiterBasedFrameDecoder 前言基礎概念分隔符的配置與選擇幀的拆分與重組幀的拆分過程&#xff1a;處理分隔符位于幀中間的情況&#xff1a; 處理半包與粘包…

AI時代,我們需要什么能力?

AI 時代&#xff0c;一定會重構很多行業&#xff0c;也會重構人民的生活工作方式&#xff0c;那么 AI 時代&#xff0c;我們需要培養什么能力呢&#xff1f; 我們應該去做那些 AI 做不了的事情&#xff01;讓 AI 成為我們的工具&#xff0c;助力我們更高效的解決問題&#xff…

【IO流系列】字符流練習(拷貝、文件加密、修改文件數據)

字符流練習 練習1&#xff1a;文件夾拷貝1.1 需求1.2 代碼實現1.3 輸出結果 練習2&#xff1a;文件加密與解密2.1 需求2.2 代碼實現2.3 輸出結果 練習3&#xff1a;修改文件數據&#xff08;常規方法&#xff09;3.1 需求3.2 代碼實現3.3 輸出結果 練習4&#xff1a;修改文件數…

day14:棧排序

問題描述&#xff1a; 棧排序。 編寫程序&#xff0c;對棧進行排序使最小元素位于棧頂。最多只能使用一個其他的臨時棧存放數據&#xff0c;但不得將元素復制到別的數據結構&#xff08;如數組&#xff09;中。該棧支持如下操作&#xff1a;push、pop、peek 和 isEmpty。當棧…

【MySQL】查詢語句:條件、排序和分頁

基本查詢 MySQL 數據庫使用SELECT語句來查詢數據。 查詢字段 以下為在MySQL數據庫中查詢數據通用的 SELECT 語法&#xff1a; SELECT 字段名,字段名... FROM 表名;選擇全部列 SELECT * FROM emp; -- 查詢所有字段一般情況下&#xff0c;除非需要使用表中所有的字段數據&…

消防主機報故障時發出故障及原因及解決辦法!

本文以青鳥消防JBF-11SF為例。 其他型號或品牌的消防主機也可參考。 開機前&#xff0c;必須先測量系統接線的絕緣電阻&#xff0c;確保各絕緣電阻滿足以下要求&#xff1a; 1&#xff09;空載時各電路信號線之間的絕緣值應大于5K歐姆。 2&#xff09;正常天氣條件下&#x…

Java SE:反射

反射作用 獲取字節碼文件里面的所有信息&#xff0c;包括構造方法、成員、成員方法&#xff0c;以及修飾他們的修飾符、類型和方法的返回值等等&#xff0c;只要是類里面的內容都能獲取&#xff0c;獲取之后可以動態的調用方法&#xff0c;動態的創建對象 獲取類字節碼文件對象…

2024全國水科技大會暨新材料在水污染防治中的應用論壇(十)

召集人&#xff1a;唐 量 上海大學環境與化學工程學院教授 莊贊勇 福州大學材料科學與工程學院教授 一、會議背景 為積極應對“十四五”期間我國生態環境治理面臨的挑戰&#xff0c;加快生態環境科技創新&#xff0c;構建綠色技術創新體系&#xff0c;全面落實科學技術部、生…

創建hadoop集群

分布式hadoop集群分布 服務器功能規劃 node-1&#xff1a;namenode,datanode,nodemanager,historyserver node-2&#xff1a;resourcemanage,datanode,nodemanager node-3&#xff1a;datanode&#xff0c;nodemanager&#xff0c;secondarynamenode #在node-1上 $ bin/hdfs …

點云數據結構化與體素化理論學習

一、PCD點云數據存儲格式的進一步認識 &#xff08;一&#xff09;PCD點云存儲格式相較于其它存儲格式&#xff08;如PLY、STL、OBJ、X3D等&#xff09;的優勢[1] &#xff08;1&#xff09;具有存儲和處理有組織的點云數據集的能力&#xff0c;這對于實時應用和增強現實及機器…