回调函数与Qt信号槽

这篇具有很好参考价值的文章主要介绍了回调函数与Qt信号槽。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

回调函数的本质是基于“想让别人的代码执行自己的代码,而别人的代码你不能随意改变”这种思维产生的,回调函数是函数指针的一种用法,如果多个类都关注某个类的状态变化,此时需要维护一个列表,以存放多个回调函数的地址,对于每一个被关注的类,都需要做类似的工作,效率低且不灵活。
Qt为了消除回调函数的弊端,开发了一种新的消息传递机制,即信号和槽。
这种机制能够自动有效的组织和管理继承自QObject的Qt对象,被称为对象树。这种机制在UI编程上具备优势,能够帮助程序员环节内存泄漏问题,当应用程序创建了一个具有父窗口部件的对象时,该对象被加入父窗口的child列表,当父窗口被销毁时,child列表中的对象被一一删除,子类释放的顺序与构造顺序相反。
当一个对象的内部状态发生改变时,如果其他对象对它的状态改变需要作出反应,只需让这个类发出状态改变的信号。
信号的注意点:
1.所有信号的声明都是公有的,所以不能在signals前面加public,private,proteed。
2.信号没有返回值。
3.信号不需要定义。
4.必须直接或间接继承自QObject类,并且开头私有声明包含Q_OBJECT
5.在同一线程中,一个信号被emit,会立即执行slot函数,slot函数执行结束后才执行emit后面的代码,若信号连接多个槽,等所有槽函数执行结束后继续执行后面代码,槽函数执行顺序按照连接顺序,不同线程即跨线程时,槽函数的执行是随机的。
6.可将信号与槽的连接方式进行设置,发出信号不需等待槽函数执行完,而是直接执行后面代码,通过设置connect第5个参数。
7.信号与槽要求参数一致,即参数类型一致,若不一致,允许信号的参数比槽函数多,但槽函数的参数顺序必须与信号的前几个一致。槽函数参数可以比信号少,但不能使用信号中不存在的参数。
槽函数是一个普通的C++函数,可以是虚函数,static函数,也可以被重载,可以公有,私有,也可以被其他函数调用,唯一特点就是可以和信号连接。
Connect函数,有两个原型

static QMtaObject::Connect connect{
	const QObject *Sender,//信号发送对象指针
	const char *signal,//信号函数字符串,使用SIGNAL()
	const QObject *receiver,//槽函数对象指针
	const char *member,//槽函数字符串,使用SLOT()
	Qt::ConnectionType = Qt::AutoConnection);
}
connect(pushButton,SIGNAL(clicked()),dialog,SLOT(close()));
static QMtaObject::Connect connect{
	const QObject *Sender,//信号发送对象指针
	const char &signal,//信号函数字符串,使用SIGNAL()
	const QObject *receiver,//槽函数对象指针
	const char &member,//槽函数字符串,使用SLOT()
	Qt::ConnectionType = Qt::AutoConnection);
}
connect(pushButton,&QPushButton::clicked,dialog,&QDialog::close);

此方式在编译期间可以进行拼写检查,参数检查,类型检查,并且支持参数的兼容性转换。文章来源地址https://www.toymoban.com/news/detail-411358.html

到了这里,关于回调函数与Qt信号槽的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 163基于matlab的不同目标函数的盲源信号分离基于负熵的

    基于matlab的不同目标函数的盲源信号分离基于负熵的;基于负熵的改进算法; 基于峭度的;基于互信息的;基于非线性PCA的。输出解混前后信号结果。程序已调通,可直接运行。 163 负熵、峭度、互信息、PCA 信号处理 (xiaohongshu.com)

    2024年02月21日
    浏览(22)
  • C++回调函数 匿名函数,类中的方法做为回调函数

    C++中的回调函数和匿名函数都是函数指针或函数对象的使用形式。下面分别介绍它们的使用方法。 回调函数是一种函数指针,它允许将函数作为参数传递给另一个函数,并在需要时调用它。这种技术通常用于事件处理、异步处理和状态机等应用中。 下面是一个简单的示例,

    2024年02月01日
    浏览(38)
  • FPGA学习任意波函数信号发生器的设计(基于quartus II13.0)

    平台: quartus II 13.0 仿真:signal tap II 语言:VHDL 方式:原理图bdf输入 芯片:Cyclone IV E: EP4CE6E22C8 设计一任意波函数信号发生器,具备以下两功能: ①能输出标准正弦波波形。 ②能输出任意函数波形。 首先明确实验用到的宏模块操作是在tool——MeGaWizard Plug-In Manager中(如下图)

    2024年02月03日
    浏览(33)
  • C/C++面向对象(OOP)编程-回调函数详解(回调函数、C/C++异步回调、函数指针)

    本文主要介绍回调函数的使用,包括函数指针、异步回调编程、主要通过详细的例子来指导在异步编程和事件编程中如何使用回调函数来实现。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:C/C++精进之路 🎀CSDN主页 发狂的小花 🌄人生秘诀:学习的本质就是极致

    2024年02月03日
    浏览(30)
  • 基于STM32单片机和AD9850的智能DDS函数信号发生器

    CSDN话题挑战赛第2期 参赛话题:学习笔记 有一天,我在浏览CSDN时看到一篇关于 AD9850 的帖子。AD9850是一款可以产生1hz到40mhz左右正弦波的芯片。淘宝的产品经销商能够将芯片与提供 TTL 电平控制的小板配对,然后以令人难以置信的 60元(或更低!)的价格出售。 要控制 AD985

    2024年02月13日
    浏览(34)
  • 【Linux】详解进程通信中信号量的本质&&同步和互斥的概念&&临界资源和临界区的概念

             访问资源在安全的前提下,具有一定的顺序性,就叫做同步 。在多道程序系统中,由于资源有限,进程或线程之间可能产生冲突。同步机制就是为了解决这些冲突,保证进程或线程之间能够按照既定的顺序访问共享资源。同步机制有助于避免竞态条件和死锁(

    2024年04月25日
    浏览(26)
  • 2、函数的本质

    栈 是一种具有特殊的访问方式的存储空间(后进先出, Last In Out First, LIFO) SP和FP寄存器 sp寄存器在任意时刻会保存我们栈顶的地址 fp寄存器也称为x29寄存器属于通用寄存器,但是在某些时刻我们利用它保存栈底的地址 ARM64里面 对栈的操作是16字节对齐的 栈的读写指令 读: ldr (lo

    2023年04月20日
    浏览(19)
  • 理解函数指针和回调函数

    指向函数的指针。比如: 理解函数指针的伪代码 比如,B把自己函数cbkFunc()的地址告诉A,A在运行过程中执行cbkFunc()。则 回调函数:指B的函数cbkFunc(); 注册回调函数:指B把函数cbkFunc()的地址告诉A; 回调:指A在运行过程中执行cbkFunc()。 无头文件.h 为了方便模块A和B写在了一

    2023年04月20日
    浏览(31)
  • 【人工智能】LLM 大模型的本质:一个超高阶函数(函数式编程思想,高阶函数),大模型的本质是有巨大数量的函数复合组成的超高阶函数

    LLM 大模型的本质:一个超高阶函数(函数式编程思想,高阶函数),大模型的本质是有巨大数量的函数复合组成的超高阶函数。 —— 禅与计算机程序设计艺术

    2024年02月09日
    浏览(46)
  • 函数指针和回调函数 以及指针函数

    函数指针(Function Pointer): 定义: 函数指针是指向函数的指针,它存储了函数的地址。函数的二制制代码存放在内存四区中的代码段,函数的地址它在内存中的开始地址。如果把函数的地址作为参数,就可以在函数中灵活的调用其它函数。 用途: 函数指针可以用来在运行

    2024年01月21日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包