9.18日常记录

news/2024/10/11 19:14:14/文章来源:https://blog.csdn.net/m0_62956971/article/details/142342955

一.信号和槽机制

信号和槽:是对象之间通信的一种机制

信号classA不关心有多少槽函数与之绑定,它只管触发信号,具体要触发哪些槽函数,是由Qt的信号和槽机制来实现的。这样的话就充分的体现了面向对象的解耦原则了,因为对于classA来说,他的任务就是将信号发出去,而这个信号发生了什么与classA无关,各自完成各自的事情,

1.信号和槽是如何建立连接的?

元对象编译器(moc)在编译过程中会对包含Q_OBJECT宏的类进行处理,生成额外的代码来实现信号和槽的连接和调用。

2.信号的声明与实现:

在类的定义中,信号使用signals关键字进行声明。例如:signals: void mySignal();。信号的声明类似于函数声明,但它们没有实现部分,并且返回类型必须为void或者没有返回类型。 当一个对象发出信号时,实际上是调用了一个由元对象编译器生成的函数。这个函数会遍历所有连接到该信号的槽,并调用它们。

3.槽的声明与实现

槽是普通的成员函数,可以在任何继承自QObject的类中声明和实现。槽函数的声明和普通函数类似,但可以使用slots关键字进行标记。例如:public slots: void mySlot();。 槽函数可以有任意的参数和返回类型,但必须与连接的信号的参数和返回类型相匹配。

4.连接信号和槽:

在 Qt 中,可以使用connect函数来连接信号和槽。例如:connect(sender, SIGNAL(mySignal()), receiver, SLOT(mySlot()));。这里sender和receiver是指向QObject对象的指针,SIGNAL和SLOT是宏,用于将信号和槽的函数名转换为字符串。 connect函数的底层实现会在元对象系统中查找信号和槽的信息,并建立连接。连接信息会被存储在一个内部的数据结构中,以便在信号发出时能够快速地找到并调用相应的槽函数。

5.信号的发射:

当一个对象需要发出信号时,可以使用emit关键字来调用信号。例如:emit mySignal();。 当信号被发射时,元对象系统会根据连接信息找到所有连接到该信号的槽函数,并依次调用它们。调用的顺序是不确定的,除非使用Qt::DirectConnection连接方式,此时槽函数会在发出信号的线程中立即执行。 

 6.connect第五个参数的几种类型?

其中第五个参数是Qt::ConnectionType类型,用于指定连接的类型,主要有以下几种: 1.Qt::AutoConnection:这是默认的连接类型。如果信号和槽在同一线程中,它的行为类似于Qt::DirectConnection;如果信号和槽在不同线程中,它的行为类似Qt::QueuedConnection。

2.Qt::DirectConnection:当信号发出时,槽函数会立即在发出信号的线程中执行。这种连接方式类似于普通的函数调用。

3.Qt::QueuedConnection:当信号发出时,槽函数会在接收对象所在的线程的事件循环中执行。如果接收对象所在的线程没有事件循环,那么这个连接将无法工作。这种连接方式允许在不同线程之间进行安全的信号和槽连接。

4.Qt::BlockingQueuedConnection:与Qt::QueuedConnection类似,但发出信号的线程会阻塞,直到槽函数返回。这种连接方式应该谨慎使用,因为它可能导致死锁。 5/Qt::UniqueConnection:这个标志可以通过按位或与其他连接类型组合使用。它可以防止重复连接相同的信号和槽,如果已经存在相同的连接,connect函数将返回false。

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

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

相关文章

我要走遍三山五岳之---嵩山

文章目录 嵩山通勤开爬总结 嵩山 2024.9.16登顶第一座五岳。 为啥第一座高山选择了嵩山呢?因为本来就是新手,想选择一个低难度的开始爬。看了小红书上的攻略,五岳的难度:华山>泰山>嵩山>衡山>恒山。 本来想选择的是…

53 - I. 在排序数组中查找数字 I

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof/%E9%9D%A2%E8%AF%95%E9%A2%9853%20-%20I.%20%E5%9C%A8%E6%8E%92%E5%BA%8F%E6%95%B0%E7%BB%84%E4%B8%AD%E6%9F%A5%E6%89%BE%E6%95%B0%E5%AD%97%20I/README.md 面试题 53 - I. 在排序数组中查找数字 …

select系统调用(实现I/O复用)

API 在一段指定时间内,监听用户感兴趣的文件描述符上的可读、可写、异常事件。 int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);文件描述符集合fd_set 是一个用于管理文件描述符集合的结构体。select调用…

用户体验在网站建设中的重要性

用户体验在网站建设中的重要性不言而喻。以下是对其重要性的具体介绍: 提升用户满意度:用户体验的优劣直接关系到用户对网站的满意程度。一个设计良好、易于导航、响应迅速的网站能够让用户在使用过程中感到舒适和愉悦,从而增加用户对网站的…

深入链表的遍历——快慢指针算法(LeetCode——876题)

今天我们一起来学习一下一个快速遍历链表的方法 我们先来看看一道经典的需要遍历链表的题目 (题目来自LeetCode) 876. 链表的中间结点https://leetcode.cn/problems/middle-of-the-linked-list/ 给你单链表的头结点 head ,请你找出并返回链…

镀金引线---

一、沉金和镀金 沉金和镀金都是常见的PCB金手指处理方式,它们各有优劣势,选择哪种方式取决于具体的应用需求和预算。 沉金(ENIG)是一种常用的金手指处理方式,它通过在金手指表面沉积一层金层来提高接触性能和耐腐蚀性…

【代码随想录训练营第42期 Day60打卡 - 图论Part10 - Bellman_ford算法系列运用

目录 一、Bellman_ford算法的应用 二、题目与题解 题目一:卡码网 94. 城市间货物运输 I 题目链接 题解:队列优化Bellman-Ford算法(SPFA) 题目二:卡码网 95. 城市间货物运输 II 题目链接 题解: 队列优…

2024 年最佳 Chrome 验证码扩展,解决 reCAPTCHA 问题

验证码,特别是 reCAPTCHA,已成为在线安全的不可或缺的一部分。虽然它们在区分人类和机器人方面起着至关重要的作用,但它们也可能成为合法用户和从事网络自动化的企业的主要障碍。无论您是试图简化在线体验的个人,还是依赖自动化工…

Java入门程序-HelloWorld

Java程序开发的三个步骤 1.编写代码得到 .java 源代码文件 2.使用javac编译得到 .class 字节码文件 3.使用java运行 注意事项 建议代码文件名全英文,首字母大写,满足驼峰命名法,源代码文件的后缀必须是.java 开发HelloWorld程序 &…

资源创建方式

kubernetes支持两种创建资源的方式: 用kubectl命令直接创建,比如:kubectl run nginx-deployment --imagenginx1.7.9 --replicas2,在命令行中通过参数指定资源的属性 通过配置文件和kubectl apply创建,创建nginx.yml文…

kubernetes中pause容器的作用与源码详解

概述 摘要:上一篇文章我们介绍了kubernetes是如何通过pause容器来构建一个pod。本文我们对pause容器做一个总结,并再此基础上次深入浅出,从pause容器的源码详细了解pause容器的实现原理。 正文 pause容器是什么 在 Kubernetes 中&#xff…

【Node.js】RabbitMQ 延时消息

概述 在 RabbitMQ 中实现延迟消息通常需要借助插件(如 RabbitMQ 延迟队列插件),因为 RabbitMQ 本身不原生支持延迟消息。 延迟消息的一个典型场景是,当消息发布到队列后,等待一段时间再由消费者消费。这可以通过配置…

Linux环境基础开发工具---vim

1.快速的介绍一下vim vim是一款多模式的编辑器,里面有很多子命令,来实现代码编写操作。 2.vim的模式 vim一共有三种模式:底行模式,命令模式,插入模式。 2.1vim模式之间的切换 2.2 谈论常见的模式---命令模式&#xf…

跨界融合,GIS如何赋能游戏商业——以《黑神话:悟空》为例

在数字化时代,地理信息系统(GIS)技术正以其独特的空间分析和可视化能力,为游戏产业带来革命性的变革。《黑神话:悟空》作为中国首款3A级别的动作角色扮演游戏,不仅在游戏设计和技术上取得了突破&#xff0c…

动态线程池实战(一)

动态线程池 对项目的认知 为什么需要动态线程池 DynamicTp简介 接入步骤 功能介绍 模块划分 代码结构介绍

微服务网关终极进化:设计模式驱动的性能与可用性优化(四)

时间:2024年09月12日 作者:小蒋聊技术 邮箱:wei_wei10163.com 微信:wei_wei10 希望大家帮个忙!如果大家有工作机会,希望帮小蒋推荐一下,小蒋希望遇到一个认真做事的团队,一起努力…

Netty笔记01-Netty的基本概念与用法

文章目录 1. 概述1.1 Netty 是什么?1.2 Netty 的特点1.3 Netty 的作者1.4 Netty 的地位1.5 Netty 的优势1.6 Netty 的工作原理1.7 Netty 的应用场景1.8 Netty 的重要组件 2. 第一个程序2.1 目标2.2 服务器端2.3 客户端2.4 流程梳理💡 提示 1. 概述 1.1 …

windows使用tcpdump.exe工具进行抓包教程

windows主机安装一些抓包工具可能有些不方便,这里有一个tcpdump.exe工具直接免安装,可以直接使用进行抓包。(工具下载见 附件) tcpdump.exe使用教程 如下: 1:tcpdump -D 可查看网络适配器(注意前面的编号)…

Meta-Learning数学原理

文章目录 什么是元学习元学习的目标元学习的类型数学推导1. 传统机器学习的数学表述2. 元学习的基本思想3. MAML 算法推导3.1 元任务设置3.2 内层优化:任务级别学习3.3 外层优化:元级别学习3.4 元梯度计算3.5 最终更新规则 4. 算法合并5. 理解 MAML 的优…

Kubernetes 集群内 DNS

DNS 简介 在互联网早期,随着连接设备数量的增加,IP 地址的管理与记忆变得越来越复杂。为了简化网络资源的访问,DNS(Domain Name System)应运而生。DNS 的核心作用是将用户可读的域名(如 www.example.com&a…