學習C++、QT---20(C++的常用的4種信號與槽、自定義信號與槽的講解)

每日一言

????????相信自己,你比想象中更接近成功,繼續勇往直前吧!

那么我們開始用這4種方法進行信號與槽的通信

第一種信號與槽的綁定方式

我們將按鍵右鍵后轉到槽

會自動跳轉到這個widget.h文件里面并自動生成了定義,我們要記住我們這個按鈕叫做這個UIbtn,所以生成的叫做這個on_UIbtn_clicked();切記,我們這個函數名字不能自己去修改,因為這個函數的名字與我們的按鈕對象的名字相同,這個是一種命名格式on_UIbtn_clicked();(on_對象名_信號名稱)

這個只是聲明,沒有實現,所以我們也需要進行實現,右鍵這個聲明里面有個Refactor重構,里面有個在widget.cpp添加定義,那么我們就可以實現功能了,比如以下的圖

所以我們測試一下,點擊這個按鈕,那么就會實現彈出信息

沒有問題

第二種信號與槽的綁定方式

我們要切記,這些信號與槽進行連接的代碼需要在構造函數進行,實現,

這個代碼是什么意思呢,ui的Connectbtn這個對象,發送的信號為clicked(),接受方為this,也就是這個窗口,SLOT里面就是接收方設置的槽函數,這個槽函數的話我們需要自己定義出來

在widget里面聲明函數,自己復制過來,名字需要與我們的格式相匹配

然后也是進行實現,實現的話也是在Widget.cpp文件

然后我們返回也是可以的

第三種信號與槽的綁定方式

第三個種方式是lambda的方式,那么這個一樣的方法,但是就是我們不需要進行槽函數的定義和實現了,因為我們是匿名函數嘛,但是要記住一下寫法,

第四種信號與槽的綁定方式

第四種方式用函數指針的寫法,我相信看語法,也會寫的出來,槽函數需要自己定義和實現

自定義信號與槽

這個就厲害了,最終形態了,可以自己定義信號與自定義槽

怎么搞

首先,信號與槽也是需要用QObject: :connect 進行連接,我們先講無參的,我們這邊根據寫出來的信號函數和槽函數,去widget.h去聲明

一定要記住自定義信號需要寫上signals:作為前綴,自定義槽函數需要public slots:這樣來寫,硬記都要記住,這個是沒有辦法的

然后我們同樣也是將這個slot槽函數進行實現,右鍵在widget.cpp中添加實現,還有我們的信號函數是不需要實現的

我們的這個信號與槽綁定之后,我們還需要進行激活信號,也就是發送信號,那么這邊有個關鍵詞是emit? ,我們的emit 作為信號的前綴就是觸發信號的作用,意思就是我們允許這個程序,后代碼執行到emit這一條代碼的時候就會觸發信號,那么槽函數就會被調用了

那么我們運行后就會看到返回的信息了,如果看不到怎么辦,而且代碼也沒問題怎么辦??那我們就重新構建一下項目,這樣就好了

那么這邊還會看到這個qDebug這個東東

在 Qt 開發中,qDebug()?是一個非常重要的調試工具,它的作用類似于 C++ 中的?std::cout,但專為 Qt 環境優化。所以我們以后都要用這個qDebug進行輸出數據,因為qDebug對調試Qt程序有很好的作用,后面可以用到了再詳細介紹

我們想要傳參數進去,怎么傳

那么這邊我們需要注意的點是這個信號與槽綁定的這個語句中不是填int value 了而是填int,這個要記住

舊語法(字符串)

SIGNAL(mySignal(int))

- 只寫參數類型
- 運行時檢查類型匹配
- 兼容性好(Qt 4/5)

新語法(函數指針)

&SenderClass::mySignal

- 寫完整函數簽名
- 編譯時檢查類型匹配
- 更安全,推薦使用

當前的代碼使用的是舊語法,所以只需要填?int這個參數類型就好了

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

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

相關文章

Anolis OS 23 架構支持家族新成員:Anolis OS 23.3 版本及 RISC-V 預覽版發布

自 Anolis OS 23 版本發布之始,龍蜥社區就一直致力于探索同源異構的發行版能力,從 Anolis OS 23.1 版本支持龍芯架構同源異構開始,社區就在持續不斷地尋找更多的異構可能性。 RISC-V 作為開放、模塊化、可擴展的指令集架構,正成為…

4萬億英偉達,憑什么?

CUDA正是英偉達所有神話的起點。它不是一個產品,而是一個生態系統。當越多的開發者使用CUDA,就會催生越多的基于CUDA的應用程序和框架;這些殺手級應用又會吸引更多的用戶和開發者投身于CUDA生態。這個正向飛輪一旦轉動起來,其產生…

Unity3D iOS閃退問題解決方案

前言 在Unity3D開發中解決iOS閃退問題需要系統性排查,以下是關鍵步驟和解決方案: 對惹,這里有一個游戲開發交流小組,希望大家可以點擊進來一起交流一下開發經驗呀! 1. 獲取崩潰日志(關鍵第一步&#xff…

嵌入式八股文之 GPIO

1. GPIO 的基本概念(1) 什么是 GPIO?GPIO 的中文意思是通用輸入輸出端口(General Purpose Input/Output),是嵌入式系統中可編程控制的通用引腳,可通過軟件配置為輸入或輸出模式。(背誦)(2) 它的…

Umi-OCR 的 Docker安裝(win制作鏡像,Linux(Ubuntu Server 22.04)離線部署)

前置博客:Ubuntu-Server 22.04.4 詳細安裝圖文教程 wget命令在windows終端下不能使用的原因及解決辦法 在 Ubuntu 22.04 LTS 上離線安裝 Docker 手把手教你在Win11下安裝docker Umi-OCR 安裝docker時報錯:workstation服務啟動報錯。錯誤1075&#…

力扣242.有效的字母異位詞

給定兩個字符串 s 和 t &#xff0c;編寫一個函數來判斷 t 是否是 s 的 字母異位詞。示例 1:輸入: s "anagram", t "nagaram" 輸出: true示例 2:輸入: s "rat", t "car" 輸出: false提示:1 < s.length, t.length < 5 * 104s…

基于Springboot+UniApp+Ai實現模擬面試小工具二:后端項目搭建

本節介紹本項目后端項目的開發工具及基礎項目的搭建&#xff0c;包括開發工具介紹及后端項目的創建和依賴框架的引入及對應配置。 源碼下載&#xff1a; 點擊下載 講解視頻&#xff1a; UniappSpringbootKimi實現模擬面試小程序-Springboot項目創建一&#xff0e;開發工具 1.…

Linux711 Mysql

模版 root192.168.235.130s password:┌──────────────────────────────────────────────────────────────────────┐│ ? MobaXterm Personal Edition v23.2 ? ││…

QT 秘鑰生成工具

該項目是注冊機和驗證機項目&#xff0c;分別是密鑰生成工具&#xff0c;和密鑰驗證demo,可以識別電腦唯一標識碼。#include "frmmain.h" #include "ui_frmmain.h" #include "qmessagebox.h" #include "qfile.h" #pragma execution_ch…

PyTorch神經網絡訓練全流程詳解:從線性層到參數優化

目錄 一、神經網絡訓練的核心組件 二、代碼逐行解析與知識點 三、核心組件詳解 3.1 線性層(nn.Linear) 3.2 損失函數(nn.MSELoss) 3.3 優化器(optim.SGD) 四、訓練流程詳解 五、實際應用建議 六、完整訓練循環示例 七、總結 在深度學習實踐中&#xff0c;理解神經網絡…

從代碼學習深度學習 - 針對序列級和詞元級應用微調BERT PyTorch版

文章目錄 前言針對序列級和詞元級應用微調BERT單文本分類文本對分類或回歸文本標注問答總結前言 在自然語言處理(NLP)的廣闊天地里,預訓練模型(Pre-trained Models)的出現無疑是一場革命。它們如同站在巨人肩膀上的探索者,使得我們能夠利用在大規模文本語料上學到的豐富…

學習筆記丨卷積神經網絡(CNN):原理剖析與多領域Github應用

本文深入剖析了卷積神經網絡&#xff08;CNN&#xff09;的核心原理&#xff0c;并探討其在計算機視覺、圖像處理及信號處理等領域的廣泛應用。下面就是本篇博客的全部內容&#xff01;&#xff08;內附相關GitHub數據庫鏈接&#xff09; 目錄 一、什么是CNN&#xff1f; 二、…

cnpm exec v.s. npx

1. 核心定位與設計目標 npx (Node Package Executor): 定位: Node.js 內置工具&#xff08;npm 5.2 起捆綁&#xff09;&#xff0c;核心目標是便捷地執行本地或遠程 npm 包中的命令&#xff0c;無需全局安裝。核心價值: 避免全局污染&#xff1a; 臨時使用某個 CLI 工具&#…

我花10個小時,寫出了小白也能看懂的數倉搭建方案

目錄 一、什么是數據倉庫 1.面向主題 2.集成 3.相對穩定 4.反映歷史變化 二、數倉搭建的優勢 1.性能 2.成本 3.效率 4.質量 三、數倉搭建要考慮的角度 1.需求 2.技術路徑 3.數據路徑 4.BI應用路徑 四、如何進行數倉搭建 1.ODS層 2.DW層 3.DM層 五、寫在最后…

OBB旋轉框檢測配置與訓練全流程(基于 DOTA8 數據集)

&#x1f680; YOLO交通標志識別實戰&#xff08;五&#xff09;&#xff1a;OBB旋轉框檢測配置與訓練全流程&#xff08;基于 DOTA8 數據集&#xff09; 在專欄前面四篇里&#xff0c;我們完成了&#xff1a; ? Kaggle交通標志數據集下載并重組標準YOLO格式 ? 訓練/驗證集拆…

uniapp制作一個視頻播放頁面

1.產品展示2.頁面功能(1)點擊上方按鈕實現頁面跳轉&#xff1b;(2)點擊相關視頻實現視頻播放。3.uniapp代碼<template><view class"container"><!-- 頂部分類文字 --><view class"categories"><navigator class"category-…

8.卷積神經網絡基礎

8.1 卷積核計算 import torch from torch import nn import matplotlib.pyplot as plt def corr2d(X,k):#計算二維互相關運算h,wk.shape#卷積核的長和寬Ytorch.zeros((X.shape[0]-h1,X.shape[1]-w1))#創建(X-H1,X-W1)的全零矩陣for i in range(Y.shape[0]):for j in range(Y.s…

【每天一個知識點】子空間聚類(Subspace Clustering)

“子空間聚類&#xff08;Subspace Clustering&#xff09;”是一種面向高維數據分析的聚類方法&#xff0c;它通過在數據的低維子空間中尋找簇結構&#xff0c;解決傳統聚類在高維空間中“維度詛咒”帶來的問題。子空間聚類簡介在高維數據分析任務中&#xff0c;如基因表達、圖…

《匯編語言:基于X86處理器》第7章 整數運算(2)

本章將介紹匯編語言最大的優勢之一:基本的二進制移位和循環移位技術。實際上&#xff0c;位操作是計算機圖形學、數據加密和硬件控制的固有部分。實現位操作的指令是功能強大的工具&#xff0c;但是高級語言只能實現其中的一部分&#xff0c;并且由于高級語言要求與平臺無關&am…

JVM故障處理與類加載全解析

1、故障處理工具基礎故障處理工具jps&#xff1a;可以列出正在運行的虛擬機進程&#xff0c;并顯示虛擬機執行主類&#xff08;Main Class&#xff0c;main()函數所在的類&#xff09;名稱以及這些進程的本地虛擬機唯一ID&#xff08;LVMID&#xff0c;Local Virtual Machine I…