【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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/8683.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Grounded-Segment-Anything实现自动文本标注

项目地址&#xff1a;IDEA-Research/Grounded-Segment-Anything: Grounded-SAM: Marrying Grounding-DINO with Segment Anything & Stable Diffusion & Recognize Anything - Automatically Detect , Segment and Generate Anything (github.com) demo地址&#xff1a…

Blender材质,纹理,UV

1.材质Material&#xff0c;用于描述物体的表面性质&#xff0c;包含以下基本属性 -基础色 -金属/非金属 -粗糙度 -透光度 -凹凸细节 添加材质步骤&#xff1a; 1&#xff09;切换到材质预览模式 2&#xff09;打开材质面板 3&#xff09;添加一个材质&#xff0c;包括材…

PostgreSQL(十二)报错:Tried to send an out-of-range integer as a 2-byte value: 51000

目录 一、报错场景二、源码分析三、实际原因&#xff08;更加复杂&#xff09;四、解决思路 一、报错场景 今天写了一个历史数据处理程序&#xff0c;在开发环境、测试环境都可以正常执行&#xff0c;但是放到生产环境上就不行&#xff0c;报了一个这样的错误&#xff1a; or…

信息系统项目管理师0095:项目管理知识领域(6项目管理概论—6.4价值驱动的项目管理知识体系—6.4.4项目管理知识领域)

点击查看专栏目录 文章目录 6.4.4项目管理知识领域6.4.4项目管理知识领域 除了过程组,过程还可以按知识领域进行分类。知识领域指按所需知识内容来定义的项目管理领域,并用其所含过程、实践、输入、输出、工具和技术进行描述。 虽然知识领域相互联系,但从项目管理的角度来看…

SparkSQL数据源

目录 第1关&#xff1a;SparkSQL加载和保存 任务描述 相关知识 加载数据 直接在文件上运行SQL 保存到路径 保存模式介绍 保存到持久表 存储和排序或分区 编程要求 测试说明 第2关&#xff1a;Parquet文件介绍 任务描述 相关知识 编程方式加载Parquet文件 Parquet分区 结构合并 …

Canvas实现画板

Canvas如何实现画板功能。 <!DOCTYPE html> <html> <head><title>Canvas 画板</title><style>canvas {border: 1px solid black;}</style> </head> <body><canvas id"canvas" width"800" heig…

第41天:WEB攻防-ASP应用HTTP.SYS短文件文件解析Access注入数据库泄漏

第四十一天 一、ASP-SQL注入-Access数据库 1.解释 ACCESS数据库无管理帐号密码&#xff0c;顶级架构为表名&#xff0c;列名&#xff08;字段&#xff09;&#xff0c;数据&#xff0c;所以在注入猜解中一般采用字典猜解表和列再获取数据&#xff0c;猜解简单但又可能出现猜解…

flask和django的对比

文章目录 1. 简介2. 安装和设置3. 路由和视图4. ORM5. 管理界面6. 社区和文档7. 性能结论 当涉及构建 Web 应用程序时&#xff0c;Flask 和 Django 是两个最受欢迎的 Python Web 框架之一。它们都提供了强大的工具和功能&#xff0c;但在某些方面却有所不同。本文将对 Flask 和…

Vue-路由介绍

目录 一、思考引入 二、路由介绍 一、思考引入 单页面应用程序&#xff0c;之所以开发效率高&#xff0c;性能高&#xff0c;用户体验好&#xff0c;是因为页面按需更新。 而如果要按需更新&#xff0c;首先需要明确&#xff1a;访问路径和组件的对应关系。该关系通过路由来…

microsoft的azure语音,开发环境运行正常,发布到centos7线上服务器之后,无法运行

最近在做AI语音对话的功能&#xff0c;用到了azure的语音语音服务&#xff0c;开发的时候还算顺利&#xff0c;部署到线上后&#xff0c;发现在正式服上无法完成语音转文本的操作&#xff0c;提示&#xff1a; org.springframework.web.util.NestedServletException: Handler d…

数字图像处理知识点

数字图像处理知识点 一、绪论1、数字图像处理相关概念2、数字图像处理流程1.3 数字图像处理主要研究内容二、视觉与色度基础1、图像传感器与二维成像原理2、三基色2.1 三基色原理2.2 亮度方程3、HSI模型3.1 HSI模型优点3.2 RGB到HSI转换三、数字图像处理基础1、图像的数字化及表…

linux Shell编程之条件语句

条件测试操作 test命令 条件测试操作 Shell环境根据命令执行后的返回状态值&#xff08;$?&#xff09;来判断是否执行成功&#xff0c;当返回值为0&#xff08;真true&#xff09;时表示成功&#xff0c;返回值为非0值&#xff08;假false&#xff09;时表示失败或异常。 t…

C++ | Leetcode C++题解之第77题组合

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> temp;vector<vector<int>> ans;vector<vector<int>> combine(int n, int k) {// 初始化// 将 temp 中 [0, k - 1] 每个位置 i 设置为 i 1&#xff0c;即 [0, k - 1] 存…

如何在您的域名中使用 Google Apps 创建 SPF 记录

关于 SPF 记录 SPF 记录是一种域名服务&#xff08;DNS&#xff09;记录&#xff0c;用于标识哪些邮件服务器被允许代表您的域发送电子邮件。它与在您的 DNS 区域中添加 MX 或 A 记录一样简单。 为什么它很重要&#xff1f; 如今&#xff0c;几乎所有滥用电子邮件消息都携带…

OpenSPG docker 安装教程

文章目录 前言自述 一、OpenSPG1.介绍 二、安装步骤1.安装服务端2.客户端部署 前言 自述 我最近是想结合chatglm3-6b和知识图谱做一个垂直领域的技术规范的问答系统&#xff0c;过程中也遇到了很多困难&#xff0c;在模型微调上&#xff0c;在数据集收集整理上&#xff0c;在知…

面向侧扫声纳目标检测的YOLOX-ViT知识精馏

面向侧扫声纳目标检测的YOLOX-ViT知识精馏 摘要IntroductionRelated WorkYOLOv-ViTKnowledge DistillationExperimental Evaluation Knowledge Distillation in YOLOX-ViT for Side-Scan Sonar Object Detection 摘要 在本文中&#xff0c;作者提出了YOLOX-ViT这一新型目标检测…

Sealos急速部署生产用k8s集群

最近一段时间部署k8s全部使用sealos了&#xff0c;整体使用感觉良好&#xff0c;基本没有什么坑。推荐给大家。 使用 Sealos&#xff0c;可以安装一个不包含任何组件的裸 Kubernetes 集群。 最大的好处是提供 99 年证书&#xff0c;用到我跑路是足够了。不用像之前kubeadm安装…

【6D位姿估计】FoundationPose 支持6D位姿估计和跟踪 CVPR 2024

前言 本文介绍6D位姿估计的方法FoundationPose&#xff0c;是CVPR 2024的满分论文&#xff0c;支持6D位姿估计和跟踪。 通过大规模的合成数据训练&#xff0c;具有强大的泛化能力&#xff0c;在测试新物体时&#xff0c;无需进行微调。 论文地址&#xff1a;FoundationPose:…

1688数据分析实操技巧||1688商品数据采集接口 数据分析

今天&#xff0c;聊一聊B2B平台的数据分析&#xff0c;以1688国内站为例。 1688平台数据接口 1688也属于阿里巴巴的体系&#xff0c;跟淘宝天猫运营很像&#xff0c;因此很多淘宝天猫的玩法调整后也适用于1688。数据分析也是如此。 在1688搞数据分析&#xff0c;搞数据化运营可…

绘唐3 零基础系列教程

绘唐3 团长董事长,即可下载工具 第一讲:安装注册 日期:2024-04-01 17:50:10 录制文件:查看 第二讲:SD,MJ出图配置演示出图 日期:2024-04-01 18:06:46 录制文件:查看