当前位置: 首页 > news >正文

Qt 信号与槽

信号与槽(signal & slot)是Qt编程的基础,使Qt中处理界面各个组件的交互操作变得更加直观和简单。

信号(Signal)就是在特定情况下被发射的事件,如PushButton最常见的信号就是鼠标单击时发射的clicked()信号;ComboBox最常见的信号是选择的列表项变化时发射的CurrentIndexChanged()

GUI程序设计的主要内容就是对界面上各个组件的信号的响应进行响应和处理。

槽(Slot)就是对信号响应的函数,槽函数可以与一个信号关联,当信号被发射时,关联的槽函数被自动执行。

信号与槽关联是用QObject::connect()函数实现的,其基本格式是:

QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));

connect() 是 QObject 类的一个静态函数,而QObject 是所有Qt类的基类,在实际调用时可以忽略前面的限定符:

connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));

其中,sender 是发射信号的对象的名称,signal() 是信号的名称。信号可以看做是特殊的函数,需要带括号。receiver 是接收信号的对象名称,slot() 是槽函数的名称,需要带括号。

QObject::connect(pushButton, SIGNAL(clicked()), MainWindow, SLOT(close()));

将pushButton按钮的clicked()信号与窗体(MainWindow)的槽函数close()相关联,当单击pushButton按钮时,就会执行MainWindow的close()槽函数。

一个信号可以连接多个槽,多个槽对一个信号的发生进行响应。

connect(pushButton, SIGNAL(clicked()), this, SLOT(hide()));
connect(pushButton, SIGNAL(clicked()), this, SLOT(close()));

当信号与槽函数带有参数时,在connect()函数里,要写明参数的类型,但可以不写参数名称。

多个信号可以连接同一个槽:

connect(pushButton, SIGNAL(clicked()), this, SLOT(close()));
connect(pushButton_2, SIGNAL(clicked()), this, SLOT(close()));
connect(pushButton_3, SIGNAL(clicked()), this, SLOT(close()));

一个信号可以连接另外一个信号,当一个信号发射时,也会发射另外一个信号,实现某种特殊的功能。

connect(pushButton, SIGNAL(objectNameChanged(QString)), this, SIGNAL(windowTitleChanged(QString)));

严格情况下,信号与槽的参数个数和类型需要一致,至少信号的参数不能少于槽的参数。

在使用信号与槽的类中,必须在类的定义中加入宏Q_OBJECT。

当一个信号被发射时,与其关联的槽函数通常被立即执行,就像正常调用一个函数一样,只有当信号关联的所有槽函数执行完毕后,才会执行发射信号处后面的代码。

 

http://www.lryc.cn/news/109998.html

相关文章:

  • 目标检测与跟踪 (1)- 机器人视觉与YOLO V8
  • mlr3verse vs KM曲线:谁能更精准地预测生存率?
  • TechTool Pro for mac(硬件监测和系统维护工具)
  • 排序算法(九大)- C++实现
  • lettuce连接池的源代码(link)
  • 小白到运维工程师自学之路 第六十二集 (docker持久化与数据卷容器)
  • 37.利用linprog解 有约束条件多元变量函数最小值(matlab程序)
  • 分页Demo
  • ChatGPT超详细介绍与功能与免费网页版(超全面!)
  • 3.PyCharm安装
  • 【C语言进阶篇】关于指针的八个经典笔试题(图文详解)
  • 用Rust实现23种设计模式之 策略模式
  • 面试题:说说JS的this指向问题?
  • ansible——roles 角色
  • GitHub上删除项目后,IDEA分享项目到GitHub提示Remote is already on GitHub
  • 【机器学习 | 决策树】利用数据的潜力:用决策树解锁洞察力
  • postgis mvt矢量切片 django drf mapboxgl
  • C语言编程工具软件推荐!
  • 单体架构和微服务架构的区别
  • python--local对象、flask上下文源码分析
  • 类文件一些内容
  • 28 Java练习——实现两个集合的交集和并集
  • ES6学习-Promise
  • 《Web安全基础》03. SQL 注入
  • 算法与数据结构(二十一)二叉树(纲领篇)
  • visio,word添加缺少字体,仿宋_GB2312、楷体_GB2312、方正小标宋简体等字体下载
  • Java爬虫
  • 海外应用商店优化实用指南之关键词
  • element+vue 之动态form
  • winform学习(3)-----Windows窗体应用和Windows窗体应用(.Net Framework)有啥区别?