Qt的信號與槽(一)

Qt的信號與槽(一)

  • 1.信號和槽的基本認識
  • 2.connect
  • 3.關閉窗口的按鈕
  • 4.函數的根源
  • 5.形參和實參的類型

🌟hello,各位讀者大大們你們好呀🌟🌟
🚀🚀系列專欄:【Qt的學習】
📝📝本篇內容:信號和槽的基本認識;connect;關閉窗口的按鈕;函數的根源;形參和實參的類型
????上一篇:Qt中的坐標系
💖💖作者簡介:軒情吖,請多多指教(>> ????? ) ??-

1.信號和槽的基本認識

在之前的學習中,我們已經簡單的了解了信號和槽相關的知識,接下來就是詳細的將這一方面的知識展示講一講。
首先我們在Linux中也有信號的概念,雖然不同相同的概念,但有相似之處
在Linux中我們談到信號,涉及到三個要素
①信號源:誰發出的信號
②信號類型:哪種類別的信號
③信號的處理方式:注冊信號處理函數,在信號被觸發的時候自動調用執行
在Qt中我們談到信號,也是涉及到三個要素
①信號源:由哪個控件發出的信號
②信號類型:用戶進行不同的操作,就會觸發不同的信號
③信號的處理方式(也就是槽):處理信號的函數,通過connect函數,把信號和槽關聯起來,這個槽函數其實是一個回調函數,當信號觸發了,Qt就會自動執行槽函數
并且我們的信號在觸發前,一定是把處理函數準備好了,因此我們一定是需要先將信號和槽進行關聯到一起后,再觸發信號,否則Qt就不知道怎么處理信號了(直接錯過了)

2.connect

我們之前講過,connect函數是QObject提供的靜態函數,我們可以通過它進行關聯信號和槽,但是我們為什么能直接在Widget的構造函數中使用呢?
這主要是因為我們的Widget繼承于QWidget,QWidget又繼承于QObject
在這里插入圖片描述
在這里插入圖片描述
在Qt中很多類都存在一定的繼承關系,QObject是大部分類的祖宗
在這里插入圖片描述
了解完這個,我們來詳細看看我們的connect的一些情況
我們先來看看它的參數情況
在這里插入圖片描述
第一個參數:這個參數的作用是哪個控件發出的信號
第二個參數:這個參數的作用是什么類型的信號
第三個參數:這個參數的作用是哪個控件來負責處理(槽是哪個類提供的)
第四個參數:這個參數的作用是處理信號的控件提供的成員函數
第五個參數:暫時不關心,有默認參數

3.關閉窗口的按鈕

下面寫了一個功能:點擊按鈕后,關閉窗口 在這里插入圖片描述
接下來我們詳細談談這份代碼當中的一些細節
在這里插入圖片描述
首先我們來說說第二個參數,這個參數我們在寫代碼時,會自動補充出一個比較相似的參數,這個就需要我們注意,不要選錯了。第一個click是一個動詞,它是一個slot(槽)函數,功能就是調用的時候點擊一下按鈕,它前面的圖標是一個也像一個“槽”,可以通過這個辨別。第二個clicked是一個過去分詞,點擊完后的狀態,這個才是我們需要的信號函數,它前面的圖標也像一個wifi圖標,代表了這個是個信號函數。
并且我們的connect要求第一個參數和第二個參數要匹配,第一個參數的類型是QPushButton*類型的,第二個參數也必須是QPushButton內置的信號(也可以是繼承父類的信號)
而我們的close槽函數,是QWidget內置的槽函數,然后Widget又繼承了QWidget的槽函數,因此不需要我們操心實現,只需要知道功能是關閉當前的窗口

4.函數的根源

現在雖然解決了使用問題,但是我們怎么知道他們從何而來呢?特別是內置的槽函數和信號,就以按鈕為例,你怎么知道它有個內置信號叫做clicked()?答案是查文檔
在這里插入圖片描述
但是其實我們在里面再怎么翻找,也找不到clicked。那怎么辦呢?其實在圖片中已經給出答案了,去它的父類中去找找
在這里插入圖片描述
abstract是抽象的意思,也就是抽象按鈕,之所以會有這樣一個類,是因為Qt中會提供好幾種按鈕,這些按鈕之間存在一些”共性”內容
就把這些共性的東西,提取出來,放到了QAbstractButton類里面
繼續點擊我們的clicked信號函數就可以看到下面的內容
在這里插入圖片描述
翻譯:當按鈕被激活時(即,當鼠標光標位于按鈕內時按下然后釋放)、鍵入快捷鍵或調用 click() 或 animateClick() 時,會發出此信號。值得注意的是,如果您調用 setDown()、setChecked() 或 toggle(),則不會發出此信號。
我們在看文檔的時候主要關注的是信號的發送時機,即對控件進行了什么操作產生的信號

5.形參和實參的類型

在這里插入圖片描述不知道大家在使用connect的時候注意到一個點,就是它的第二個和第四個參數的類型都是char*類型的,但是我們傳遞的參數都是函數指針類型的,并且即使是函數指針類型的,也會有問題,因為兩個實參的函數指針類型也是不一樣。
在這里插入圖片描述

C++是不允許兩個不同類型之間進行賦值的
其實這個是舊版本的connect聲明,現在新版的已經不是這樣了,并且我們在舊版時,需要給信號參數傳參時需要帶上SIGNAL宏,給槽參數傳參時需要帶上SLOT宏,這樣才能將參數轉換成char*類型
在這里插入圖片描述
現在的Qt5就不需要那么麻煩,connect有了重載版本,第二個和第四個參數變成了泛型類型,可以接受任何類型的函數指針
在這里插入圖片描述
在圖中所說的出自同一個類的意思是,參數二和參數四的函數指針是參數一和參數三類的成員函數

🌸🌸Qt的信號與槽(一)大概就講到這里啦,博主后續會繼續更新更多Qt的相關知識,干貨滿滿,如果覺得博主寫的還不錯的話,希望各位小伙伴不要吝嗇手中的三連哦!如有小伙伴需要Qt的安裝包可以私信我,你們的支持是博主堅持創作的動力!💪💪

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

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

相關文章

springMVC02-視圖解析器、RESTful設計風格,靜態資源訪問配置

一、SpringMVC 的視圖在 SpringMVC 中,視圖的作用渲染數據,將模型 Model (將控制器(Controller))中的數據展示給用戶。在 Java 代碼中,視圖由接口 org.springframework.web.servlet.View 表示SpringMVC 視圖的種類很多…

Go中使用Google Authenticator

現在為了安全Google二次驗證使用越來越平凡了,所以我們自己做的一些產品中,也會用到Google Authenticator。 介紹 Google Authenticator采用的算法是TOTP(Time-Based One-Time Password基于時間的一次性密碼),其核心內…

ReactNative【實戰系列教程】我的小紅書 4 -- 首頁(含頂欄tab切換,橫向滾動頻道,頻道編輯彈窗,瀑布流布局列表等)

最終效果 頂欄 modules/index/components/topBar.tsx import icon_daily from "/assets/images/icon_daily.png"; import MaterialIcons from "expo/vector-icons/MaterialIcons"; import { useCallback, useState } from "react"; import { Im…

告別Root風險:四步構建安全高效的服務器管理體系

當整個開發團隊都使用root賬號操作服務器,且重要數據無備份時,系統如同行走在懸崖邊緣。本文將分享一套經過驗證的四步解決方案,幫助團隊快速提升主機安全性。 為什么必須告別Root賬號? 直接使用root賬號的風險: &am…

【IM項目筆記】1、WebSocket協議和服務端推送Web方案

這里寫自定義目錄標題 1、HTTP和WebSocket協議2、WebSocket3、Http VS WebSocket4、WebSocket - 建立連接5、服務端推送Web方案(1) 短輪詢(2) 長輪詢(3) WebSocket長連接1、HTTP和WebSocket協議 ?? HTTP請求的特點:通信只能由客戶端發起。所以,早期很多網站為了實現推送技…

【深度學習新浪潮】什么是上下文長度?

大型語言模型(LLM)的上下文長度是指模型在處理當前輸入時能夠有效利用的歷史文本長度,通常以token(如單詞、子詞或標點)為單位衡量。例如,GPT-4支持128K token的上下文,而Llama 4 Scout甚至達到了10M token的驚人規模。這一指標直接影響模型在長文檔理解、多輪對話等復雜…

Modbus TCP轉Profibus網關輕松讓流量計與DCS通訊

Modbus TCP轉Profibus網關輕松讓流量計與DCS通訊工業自動化系統中,協議差異常成為設備互聯的“語言障礙”。例如,當流量計采用Modbus TCP協議,而DCS系統僅支持Profibus DP時,如何實現無縫通信?本文將結合技術原理與真實…

云時代下的IT資產管理自動化實踐

前言伴隨著企業數字化轉型進程的加快,IT資產規模日益龐大且復雜。傳統的手工IT資產登記、跟蹤與管理方式,效率低下且容易出錯,已經無法滿足現代企業對于敏捷化、可視化和自動化運維的需求。云計算、容器化、微服務架構的普及又進一步加快了資…

Windows主機遠程桌面連接Ubuntu24.04主機

最近剛剛換了臺新電腦,想著空出老電腦直接裝一個Ubuntu系統給新電腦遠程連接過去進行開發,就可以完美避開雙系統老是要重啟切換的問題。仔細一查發現Ubuntu24.04自帶了RDP遠程工具,大喜!于是探究了一番。 本篇文章將介紹本人探究…

Android WebView 性能優化指南

Android WebView 性能優化指南 WebView優化需要從多個維度綜合考慮:優化維度關鍵措施預期收益初始化延遲加載、實例復用降低內存峰值渲染硬件加速、合理布局提升流暢度20%內存獨立進程、泄漏防護減少OOM風險網絡緩存策略、資源攔截節省流量30%安全漏洞修復、接口限制…

Linux下SPHinXsys源碼編譯安裝及使用

目錄 軟件介紹 基本依賴 一、源碼下載 二、安裝依賴庫 1、BLAS 2、LAPACK 3、oneTBB 4、googletest 5、Boost 6、Simbody 7、pybind11 8、Eigen3 三、解壓縮 四、編譯安裝 軟件介紹 SPHinXsys是胡湘渝博士團隊采用C/C開發的一個開源無網格、多分辨率、多物理場、…

Linux中的靜態庫和動態庫

首先 我們要明白什么是庫? 庫(Library)是一組預編譯的代碼,提供特定的功能,可以被多個程序共享調用,避免重復編寫代碼。在鏈接步驟中,鏈接器將從庫文件取得所需的代碼,復制到生成的可執行文件中…

Vue3-組件化-Vue核心思想之一

一.組件及組件化1.組件化的作用由于之前的代碼全寫在一個App.vue這個文件里面,會到導致一個文件代碼過于多而且不易復用,所以有組件化的思想。2.組件的使用①創建創建一個.vue文件,使用setup的簡寫方式會自動導出.vue文件②導入import 組件對…

OS學習筆記

《幾個基本知識點》 一、2的冪 1024210 51229 25628 12827 6426 3225 1624 823 422 221 K210 G220 M230 T240 P250 E260 Z270 Y280 R290 Q2100 二、常用的ASCII碼 ‘1’0x31 ‘A’0x41 ‘a’0x61 空格0x20 換行0x0A 回車0x0D 三、存儲器層次中的典型速度 CPU/寄存器&#xff1a…

嵌入式學習筆記-MCU階段-DAY01

恭喜大家完成了C語言的學習,現在咱們來到咱們的硬件MCU階段,咱們這里的工程用的是keil,環境搭建不再贅述,希望大家在這一階段仍然學的愉快 1.資料部分 用的最多的就是STM32f103的手冊,搭配STM32F103ZET6的開發板 2.概…

three案例 Three.js波紋效果演示

波紋效果,在智慧城市可視化開發中經常用到,這里分享一個比較好玩的案例 以下是詳細的步驟: 初始化部分:設置 Three.js 環境,包括場景、相機、渲染器和控制器 幾何體和紋理:創建平面幾何體并加載波紋紋理 著…

Flutter-詳解布局

上一章我們詳細的學習了 Flutter 中的Widget,這一章我們將要學習 Flutter 的布局, 在上一章我們了解到了:Everything is a widget,在 Flutter 中幾乎所有的對象都是一個 Widget ,當然也包括布局,Flutter 的…

EPLAN 電氣制圖:建立自己的部件庫,添加部件-加SQL Server安裝教程(三)上

在智能電氣設計領域,EPLAN 作為主流的設計軟件,其部件庫的完善程度直接影響項目設計的效率與質量。本文將從實際操作出發,詳細講解如何在 EPLAN 中建立專屬部件庫并添加部件,為電氣設計奠定堅實基礎。一、部件庫:電氣設…

靜態路由進階實戰全解

一、項目背景二、項目拓撲圖三、設備命名與IP地址規劃設備名接口編號IP地址規劃R1GE0/0192.168.1.1/24GE0/1172.16.1.1/24R2GE0/0192.168.1.2/24GE0/1192.168.2.2/24R3GE0/0192.168.2.3/24GE0/1192.168.3.3/24GE0/2192.168.4.3/24R4GE0/0192.168.3.4/24GE0/1192.168.4.4/24GE0/…

stm32hal模塊驅動(3)ssd1305 oled驅動

SD1305 OLED 驅動芯片詳細介紹SSD1305 是 Solomon Systech 公司生產的一款 OLED 顯示控制器/驅動器,專為 128x64 或 128x32 點陣的 OLED 顯示屏設計。下面我將從多個方面詳細介紹這款驅動芯片。一、SSD1305 基本特性顯示分辨率:最大支持 128 segments 6…