当前位置: 首页 > 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…...

并发编程进阶:volatile、内存屏障与 CPU 缓存机制详解

知识点回顾 1. 什么是CQRS&#xff1f; CQRS是Command Query Responsibility Segregation的缩写&#xff0c;一般称作命令查询职责分离。从字面意思理解&#xff0c;就是将命令&#xff08;写入&#xff09;和查询&#xff08;读取&#xff09;的责任划分到不同的模型中。 对比…...

吃透Linux/C++系统编程:文件与I/O操作从入门到避坑

合集 - LLM应用实战(17) 1. LLM应用实战&#xff1a;当KBQA集成LLM(二) 2024-04-25 2. LLM应用实战&#xff1a;当KBQA集成LLM 2024-04-11 3. LLM实战&#xff1a;LLM微调加速神器-Unsloth LLama3 2024-05-14 4. LLM实战&#xff1a;LLM微调加速神器-Unsloth Qwen1.5 2024-05…...

BJT与MOSFET高频模型对比指南:5个关键差异点帮你选对晶体管

BJT与MOSFET高频模型对比指南&#xff1a;5个关键差异点帮你选对晶体管 在射频电路设计中&#xff0c;晶体管的高频特性往往决定了整个系统的性能上限。对于刚踏入这一领域的设计师而言&#xff0c;BJT&#xff08;双极型晶体管&#xff09;和MOSFET&#xff08;金属氧化物半导…...

实测AI净界抠图能力:发丝、玻璃杯、薄纱,复杂边缘处理全展示

实测AI净界抠图能力&#xff1a;发丝、玻璃杯、薄纱&#xff0c;复杂边缘处理全展示 1. 为什么我们需要更智能的抠图工具&#xff1f; 在日常工作和创作中&#xff0c;抠图是一个绕不开的环节。无论是电商产品图处理、平面设计还是AI训练数据准备&#xff0c;我们都希望快速获…...

[RK3588-Android12] BQ25703充电IC状态检测与电池图标动态显示的实现

1. 理解BQ25703充电IC与Android电源管理的关系 在RK3588平台上开发Android12系统时&#xff0c;电源管理是个绕不开的话题。BQ25703作为一款高性能充电IC&#xff0c;负责处理设备充电过程中的各种状态转换。我最近在项目中就遇到了一个典型问题&#xff1a;当DC电源插入时&…...

华为交换机Eth-Trunk配置实战:手工与LACP模式全解析(附排错指南)

华为交换机Eth-Trunk深度配置指南&#xff1a;从手工模式到LACP模式的技术实践 在企业网络架构中&#xff0c;带宽瓶颈和单点故障一直是困扰网络工程师的两大难题。记得去年参与某金融数据中心改造时&#xff0c;核心交换机之间的千兆链路在业务高峰时段频繁出现拥塞告警&#…...

避开这3个坑!MATLAB匿名函数从入门到精通(2024新版)

避开这3个坑&#xff01;MATLAB匿名函数从入门到精通&#xff08;2024新版&#xff09; 在工程计算和数据分析领域&#xff0c;MATLAB的匿名函数一直是提升代码灵活性的利器。然而&#xff0c;许多工程师在实际使用中常常陷入几个典型陷阱&#xff0c;导致代码效率低下甚至运行…...

Flux 图像生成 API 集成指南

在本篇文章中&#xff0c;我们将为您介绍 Flux 图像生成 API 的集成步骤。通过该 API&#xff0c;您可以输入自定义参数以生成官方的 Flux 图像。Flux 图像生成 API 是一个强大的工具&#xff0c;适用于需要图像生成的应用场景&#xff0c;如内容创作、游戏开发和广告设计等。 …...

MSG文件高效提取工具:解放双手的Outlook邮件解析方案

MSG文件高效提取工具&#xff1a;解放双手的Outlook邮件解析方案 【免费下载链接】msg-extractor Extracts emails and attachments saved in Microsoft Outlooks .msg files 项目地址: https://gitcode.com/gh_mirrors/ms/msg-extractor 副标题&#xff1a;你是否还在为…...

基于LFM2.5-1.2B-Thinking-GGUF的Java面试题智能生成与解析系统

基于LFM2.5-1.2B-Thinking-GGUF的Java面试题智能生成与解析系统 1. 解决Java面试准备的痛点 对于Java开发者来说&#xff0c;面试准备往往是个耗时费力的过程。传统的刷题方式存在几个明显问题&#xff1a;一是题库更新慢&#xff0c;跟不上技术发展&#xff1b;二是题目质量…...