当前位置: 首页 > news >正文

【qt】核心机制信号槽(下)

这里写目录标题

  • 自定义的信号
  • 自定义的槽
  • 自定义的信号和槽的结合使用
  • 信号和槽的断开
  • 总结:

自定义的信号

信号就是一个函数声明

前面咱们都用的qt组件自带的信号,接下来我们自己写一个信号。

信号只需要在前面加一个signals即可
这个函数不需要实现
参数传了一个自定义的类型

在这里插入图片描述
在这里插入图片描述

自定义的槽

当有了自定义的信号,咱们再去搞一个自定义的槽。
在这里插入图片描述

注意:在自定义的槽函数,前面加了slots,其实也可以不加,但是不加的话,槽函数将无法使用转换成字符串的方式进行关联,因此建议在自定义槽函数时,最好加上slots.

槽函数是必须要做实现的在mainwindow.cpp中
在这里插入图片描述
然后咱们用一个按钮点击信号去关联咱们自定义的槽函数
随便教一下大家如何去用代码创建主键。
首先在mainwindow.h中添加按钮的数据类型

要包含头文件QPushButton

在这里插入图片描述
然后在mainwindow.cpp中new一个按键,并进行位置和大小的设置,最后设置按钮文字
在这里插入图片描述
然后按钮点击信号和我们的自定义的槽进行关联
在这里插入图片描述
运行效果:

在这里插入图片描述
这样就做到了自定义槽的使用

自定义的信号和槽的结合使用

上面都是用的组件已经有的信号,下面咱们用自己定义的信号和槽来玩玩。
mainwindow.h中

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QPushButton>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEstruct people
{QString name;int age;
};class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();signals:void mySignal(people p);//自定义的信号传自定义的类型public slots:void mySlot();//自定义的槽void mySlot2(people p);//自定义的槽private:Ui::MainWindow *ui;QPushButton*btn;
};
#endif // MAINWINDOW_H

mainwindow.cpp中

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPushButton>
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);btn=new QPushButton(this);btn->setGeometry(200,200,100,50);btn->setText("超级大按钮");qRegisterMetaType<people>("people");//connect(btn,&QPushButton::clicked,this,&MainWindow::mySlot);connect(btn,SIGNAL(clicked()),this,SLOT(mySlot()));//必须在声明时,前面加slot// connect(this,SIGNAL(mySignal(people p)),this,SLOT(mySlot2(people p)));connect(this,&MainWindow::mySignal,this,&MainWindow::mySlot2);}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::mySlot()
{qDebug()<<"你点到我了"<<endl;people p;p.name="姚国林";p.age=19;emit mySignal(p);//自己写的信号只能手动发送信号
}void MainWindow::mySlot2(people p)
{qDebug()<<p.name<<" "<<p.age<<endl;disconnect(this,&MainWindow::mySignal,this,&MainWindow::mySlot2);
}

运行效果:
在这里插入图片描述
讲解:
1.connect(this,&MainWindow::mySignal,this,&MainWindow::mySlot2);首先对自定义的信号和槽进行了关联
2.自定义的信号要进行手动发出emit mySignal§;
3.当传的产生类型是自定义的时候,要在关联前加一个qRegisterMetaType(“people”); 其意在Qt中注册一个自定义数据类型people,使其能够在信号和槽之间进行传递。
注意:

信号的参数个数一定要大于等于槽的参数个数
槽的参数类型要与槽的参数类型相对应

信号和槽的断开

当你不想再关联了,或者是防止关联多次,可以使用disconnect进行断开。

当我将disconnect哪行代码进行注释时,我一直点按钮,就会一直输出’你点到我了’和我的信息。
在这里插入图片描述
当我添加上这行代码,它只会第一次出现我的信息,后面就关联不上了。
在这里插入图片描述

disconnect你要断开那个信号槽,后面就输填入相关的信号槽,跟connect一样。
disconnect的多种形式:
在这里插入图片描述

总结:

到这里信号槽也就讲完了。
总的来说信号和槽,都是一个函数
信号是不用做实现的函数
槽是要做具体实现的函数
ui界面的组件都有自己的信号和槽,信号也可以自动发出,我们只需要进行关联即可,手动或者自动关联
如果自定义信号和槽要注意:

  • 定义信号前要加signals
  • 定义槽函数前最好加上slots
  • 参数是自定义的类型,需要加qRegisterMetaType(“class”);
  • 只能手动发出信号 emit

也是成功的将信号槽机制讲完了,你一定可以!愿君更上一层楼!
前行的路总是孤独的,也希望能跟大家成为朋友,一起前进!
快来互粉(^-^)V

相关文章:

【qt】核心机制信号槽(下)

这里写目录标题 自定义的信号自定义的槽自定义的信号和槽的结合使用信号和槽的断开总结&#xff1a; 自定义的信号 信号就是一个函数声明 前面咱们都用的qt组件自带的信号&#xff0c;接下来我们自己写一个信号。 信号只需要在前面加一个signals即可 这个函数不需要实现 参数传…...

C++ 基础 输入输出

一 C 的基本IO 系统中的预定义流对象cin和cout: 输入流&#xff1a;cin处理标准输入&#xff0c;即键盘输入&#xff1b; 输出流&#xff1a;cout处理标准输出&#xff0c;即屏幕输出&#xff1b; 流&#xff1a;从某种IO设备上读入或写出的字符系列 使用cin、cout这两个流对…...

八股文(C#篇)

C#中的数值类型 堆和栈 值类型的数据被保存在栈&#xff08;stack)上&#xff0c;而引用类型的数据被保存在堆&#xff08;heap&#xff09;上&#xff0c;当值类型作为参数传递给函数时&#xff0c;会将其复制到新的内存空间中&#xff0c;因此在函数中对该值类型的修改不会影…...

【YOLOv9算法原理简介】

YOLOv9算法原理 单阶段检测器:YOLOv9延续了YOLO系列的单阶段检测器设计,即在单次前向传播中同时预测边界框和类别概率,这使得它能够实现快速的检测速度。通用高效层聚合网络(GELAN) :YOLOv9引入了一种新的模型架构GELAN,它通过高效的层聚合块和计算模块,以较小的参数量…...

2010NOIP普及组真题 2. 接水问题

线上OJ&#xff1a; 一本通&#xff1a;http://ybt.ssoier.cn:8088/problem_show.php?pid1950 解法一、朴素模拟 核心思想&#xff1a; 朴素模拟&#xff1a; 1、先给每个b[i]水龙头分配一个人a[i]&#xff0c;b[i] 表示水龙头的剩余时间。同时标记该水龙头为 used 使用中 2…...

ElementUI从unpkg.com完整下载到本地的方法 - 解决unpkg.com不稳定的问题 - 自建镜像站 - 不想打包只想cdn一下

方法 方法1&#xff09;随便弄个文件夹&#xff0c;根据官网npm方法下载包&#xff0c;提取即可 npm i element-ui -S cd /node_modules/element-ui/ ls src 安装npm方法&#xff1a;https://nodejs.org/en 方法2&#xff09;不推荐 - 在github中搜索对应的库zip包&#xff0…...

什么是BFF API

BFF&#xff08;Backend For Frontend&#xff09;API 是一种架构模式&#xff0c;旨在为特定的前端应用&#xff08;如移动应用、桌面应用或网页应用&#xff09;提供定制化的后端服务。通过这种方式&#xff0c;后端可以根据前端的具体需求和特性&#xff0c;提供最优化的数据…...

分享自己一篇在亚马逊云科技AWS官网发的Blog技术文章

小李哥在亚马逊AWS官网&#xff0c;作为第一作者发了自己的第一篇AWS Blog文章&#xff0c;也是自己今年在AWS官网的第11篇文章。文章主要内容是描述为出海的金融企业&#xff0c;搭建满足PCI-DSS合规、FIPS 140-2 Level 3安全标准的传输中数据加密云端方案&#xff0c;主要用于…...

封装长按触发事件的uniapp组件

简单说一下原理 首先介绍三个针对触摸屏设备的事件&#xff0c;分别是&#xff1a; touchstart&#xff1a;当手指触摸屏幕时触发&#xff0c;即触摸开始的时候&#xff1b;touchend&#xff1a;当手指离开屏幕时触发&#xff0c;即触摸结束的时候&#xff1b;touchcancel&am…...

Docker 安装的MySQL迁移数据库

1. 导出数据库 docker ps :查看数据库对应的 CONTAINER ID docker exec -it id /bin/bash : 进入到mysql的docker实例中 cd /usr/bin : 进入到bin目录 mysqldump -u root -p123456 study > /root/study_backup0509.sql :使用mysqldump备份库&#xff0c;注意密码与-p之间…...

算法训练Day28 | ● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

122.买卖股票的最佳时机II class Solution { public:int maxProfit(vector<int>& prices) {vector<int> dp(2,0);dp[0] -prices[0];for(int i1; i<prices.size(); i){dp[0] max(dp[0], dp[1]-prices[i]);dp[1] max(dp[1], prices[i]dp[0]);}return dp[1]…...

Linux(openEuler、CentOS8)基于chrony企业内网NTP服务器搭建实验

一、知识点 chrony 是由 守护进程 chronyd 以及 命令行工具 chronyc 组成的 chronyd 在后台静默运行并通过 123 端口与时间服务器定时同步时间&#xff0c;默认的配置文件是 /etc/chrony.conf chronyc 通过 323 端口与 chronyd 交互&#xff0c;可监控 chronyd 的性能并在运…...

前端开发框架Vue

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Vue概述 Vue.js&#xff08;简称Vue&#xff09;是由尤雨溪&#xff08;Evan You&#xff09;创建并维护的一款开源前端开发框架。Vue以其轻量级、易上手和高度灵活的特点&…...

Vue2中引入ElementUI

Vue中引入ElementUI 目录 Vue中引入ElementUI安装 全库导入main.py使用 仅引入样式文件main.py使用 安装 官方文档 npm i element-ui -S全库导入 main.py import ElementUI from element-ui;Vue.use(ElementUI)使用 <template> <div class"main">&l…...

华中科技大学雷达站部署

一&#xff1a;项目地址 GitHub - HUSTLYRM/HUST_Radar_2023: 华中科技大学狼牙战队 RoboMaster 2023赛季 雷达站 二&#xff1a;安装依赖 2.1创建虚拟环境 首先是程序是基于python3.8完成&#xff0c;所以创建虚拟环境的时候&#xff0c;选择3.8的虚拟环境 conda create -…...

小程序引入 Vant Weapp 极简教程

一切以 Vant Weapp 官方文档 为准 Vant Weapp 官方文档 - 快速入手 1. 安装nodejs 前往官网下载安装即可 nodejs官网 安装好后 在命令行&#xff08;winr&#xff0c;输入cmd&#xff09;输入 node -v若显示版本信息&#xff0c;即为安装成功 2. 在 小程序根目录 命令行/终端…...

labview技术交流-将时间字符串转换成时间格式

应用场景 我们在数据库中设计了datetime类型的字段&#xff0c;比如字段名就叫“保存时间”&#xff0c;当我们使用labview将表中数据读取出来后datetime类型的数据是以字符串的格式显示的。而我们想计算两条数据“保存时间”的间隔时间时&#xff0c;用字符串类型自然是没法计…...

算法提高之迷宫问题

算法提高之迷宫问题 核心思想&#xff1a;最短路问题 从(n-1,n-1)开始bfs 往前走一个就存入pre数组 之后再遍历pre数组输出 #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N 1010,M N*N;#define x first#def…...

泛微E9开发 通过点击按钮来复制选择的明细行

泛微E9开发 通过点击按钮来复制选择的明细行 复制明细行功能背景展示效果实现方法 复制明细行 功能背景 用户可以通过“复制明细”按钮来实现新增选择的明细行&#xff0c;并且新增明细行的数据跟选择的数据完全一样&#xff0c;具体操作如下图所示&#xff1a; 手动新增明细…...

sqlalchemy 分表实现方案

1.需求及场景概述 现有系统中因历史数据量过大&#xff0c;产生了将历史数据进行按月存储的要求&#xff0c;系统和数据库交互使用的是sqlalchemy&#xff0c;假设系统的原来的历史记录表&#xff08;record&#xff09;如下&#xff1a; 为了将历史数据按月分表存储&#xff0…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景

Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知&#xff0c;帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量&#xff0c;能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度&#xff0c;还为机器人、医疗设备和制造业的智…...

spring Security对RBAC及其ABAC的支持使用

RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型&#xff0c;它将权限分配给角色&#xff0c;再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...

论文阅读:Matting by Generation

今天介绍一篇关于 matting 抠图的文章&#xff0c;抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法&#xff0c;已经有很多的工作和这个任务相关。这两年 diffusion 模型很火&#xff0c;大家又开始用 diffusion 模型做各种 CV 任务了&am…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析

MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录&#xff0c;这个目录下存放着许多可执行文件。与其他系统的可执行文件类似&#xff0c;这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中&#xff0c;用…...