QT信号、槽机制介绍与实现

时间记录:2023/12/17
1.介绍
    QT中进行对象之间事件的处理机制为信号、槽机制,即一个对象状态改变时发出信号,然后与此信号进行绑定的对应槽便会被触发,类似于c/c++里面的回调函数机制
2.信号
    在一定情况下被发射的事件,QT中,声明信号使用关键字signals,发送信号使用emit,声明信号时不需要使用关键字public/protected/private,同时,信号没有返回值,使用void,信号只需要进行声明而不需要进行定义(实现)。
3.在QT中创建一个c++的类然后实现信号、槽
(1)右键项目名称,点击Add New…
添加新文件
选择add
(2)选择C++文件,C++ Class,然后点击Choose…
创建类
(3)确定类名和基类,选择文件添加位置。
设置类名
(4)确定新建文件要添加进哪个项目中。
添加文件到项目
3.1 头文件中定义信号

signals:void newSignals();

4.槽
    信号的响应函数,在槽定义时需要使用public/protected/private关键字修饰,可以带参数,使用slots关键字进行声明,并且需要进行实现,所有函数都可以作为槽函数使用(信号除外)。
4.1 头文件中进行声明

private slots:void newSlot();

4.2 源文件中进行实现

void MyTestFile::newSlot()
{//进行的相应操作
}

5.信号与槽的绑定、发送信号

MyTestFile *test = new MyTestFile();
QObject::connect(test,SIGNAL(newSignal()),test,SLOT(newSlot()));//方式1 SIGNAL和SLOT宏进行绑定
QObject::connect(test,&MyTestFile::newSignal,test,&MyTestFile::newSlot);//方式2 函数地址进行绑定
QObject::connect(test,&MyTestFile::newSignal,[=](){//槽函数操作
});//方式3 lambda表达式方式emit newSignal();//发送信号

6.信号和槽的重载
与c++的类方法类似,QT中信号和槽也可以进行重载,即函数名相同,参数类型不同/参数数量不同即为重载,然后根据信号传入的实参调用对应槽
6.1 信号与槽的绑定需要槽的参数小于等于信号的参数
函数指针方式进行绑定

MyTestFile *newF=new MyTestFile;
void (MyTestFile:: *sign)(int)=&MyTestFile::newSignal;//函数指针
void (MyTestFile:: *sl)(int)=&MyTestFile::newSlot;
QObject::connect(newF,sign,newF,sl);//QT5的新方式

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

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

相关文章

QT for Android安卓编译环境搭建+首次编译3个大坑

1、安装 编译环境能否搭建成功,主要是看各个依赖软件的版本是否匹配。依赖的软件有3个:JDK、安卓SDK、安卓NDK。 我的qt版本是5.14.1,我亲测以下版本可以成功让编译安卓: QT5.14 JDK1.8.0 安卓SDK26.1 安卓NDK20.1 在QT-&g…

HarmonyOS开发实战:如何实现一个运动排名榜页面

HarmonyOS开发实战:如何实现一个运动排名榜页面 代码仓库: 运动排名榜页面 项目介绍 本项目使用声明式语法和组件化基础知识,搭建一个可刷新的排行榜页面。在排行榜页面中,使用循环渲染控制语法来实现列表数据渲染,…

Redis Cluster集群搭建 三主三从

Redis包下载 Linux: http://download.redis.io/releases/ Mac or Windows: https://redis.io/download/ 2.下载后解压进入文件夹(本次我的Redis版本是6.2.14版本) /redis/redis-6.2.14 开始安装 make instarll修改配置文件复制redis.conf 6…

添加E1000网卡进行测试,只有VMXNET3性能的四分之一

正文共:1444 字 14 图,预估阅读时间:2 分钟 我们前面介绍了VMware ESXi 6.7中的适配器类型性能(VMWare ESXi中,不同的虚拟网卡性能竟然能相差三倍!),当时的配置项主要为E1000e和VMXN…

设计模式——结构型

1.装饰器模式 要素:装饰器,装饰对象 为待装饰对象中某一结构特征添加内容,而不是新建一个特征 /*** 装饰对象*/ public interface Shape {public void draw(); } /*** 具体装饰对象*/ public class Circle implements Shape{private String…

基于Java SSM框架实现水果销售网站系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现水果销售网站系统演示 摘要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识&a…

Java语法之Object类

Object类时Java默认提供的类,是所有类的父类,它里面有好多便利的方法供我们使用 1.equals对象比较方法 在我们看来,姓名年龄一样就应该是同一个人,但实际上运行结果却是false,看一下源码: 源码里面是在用俩…

MDK编译过程和文件类型

MDK是一款IDE软件,具有,编辑,编译,链接,下载,调试等等的功能。 1.编译器介绍: MDK可以编译C/C文件和汇编文件,MDK只是一款IDE软件,那他内部使用的是什么编译器呢&#x…

Google Gemini 模型本地可视化

Google近期发布了Gemini模型,而且开放了Gemini Pro API,Gemini Pro 可免费使用! Gemini Pro支持全球180个国家的38种语言,目前接受文本、图片作为输入并生成文本作为输出。 Gemini Pro的表现超越了其他同类模型,当前版…

便签类工具有哪些?比较好用的便签工具用哪个

便签类工具比较多,每个人使用便签的用处不同,有些人用便签当做记事本来记事,有些人借助便签工具来记录转瞬即逝的灵感,还有些人使用便签来记录学习笔记,还有些人用便签罗列工作计划...... 你是否也在和其它人一样寻找…

学习Java第70天,过滤器Filter简介

过滤器概述 Filter,即过滤器,是JAVAEE技术规范之一,作用目标资源的请求进行过滤的一套技术规范,是Java Web项目中最为实用的技术之一 Filter接口定义了过滤器的开发规范,所有的过滤器都要实现该接口 Filter的工作位置是项目中所有目标资源之前,容器在创建HttpServletRequest和…

漏洞复现-浙大恩特客户资源管理系统CustomerAction.entphone;.js 接口任意文件上传漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…