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

QT核心————信号槽

信号槽

1、概念
信号和槽是两个函数,这是Qt在C++基础上新增的特性。类似于其他技术中的回调的概念。
信号槽通过程序员提前设定的“约定”,可以实现对象之间的通信,有两个先决条件。
● 通信的对象必须都是从QObject类中派生出来的。
● 类中要有Q_OBJECT宏。
2、函数原型
信号槽需要在使用前进行约定,这个约定也被称之为连接,使用connect函数进行连接。

// 参数1:发射者

// 参数2:信号函数,表示发射者发起的动作。SIGNAL()包裹。必须是发射者所属类内的函数

// 参数3:接收者

// 参数4:槽函数,表示接收者要履行的约定,使用SLOT()包裹。必须是接受者类内的函数!

connect(const QObject * sender, const char * signal, const QObject * receiver, const char * method)

[static]

【注意】
1)信号函数必须是发射者所属类(或者发射者的基类)的成员函数;同理槽函数必须是接受者所属类(或接受者的基类)的成员函数!
2)connect()写两次,就是一次发射者的动作(信号函数),接受者两次执行槽函数!
第五个参数:
第五个参数type就是用来指定连接的类型。它可以是以下几种枚举值之一:
Qt::AutoConnection:Qt将自动选择连接类型。如果信号和槽在同一线程中,那么使用Qt::DirectConnection,否则使用Qt::QueuedConnection。
Qt::DirectConnection:直接连接。当信号发出时,槽函数会立即在发射信号的线程上被调用。这意味着如果信号和槽位于不同线程,那么可能会出现线程安全问题。
Qt::QueuedConnection:队列连接。当信号发出时,Qt会将事件放入接收对象的事件队列中,然后等待目标对象所在的线程处理该事件。因此,槽函数的执行将延迟到接收对象所在的线程中执行,这通常用于跨线程连接。
Qt::BlockingQueuedConnection:阻塞队列连接。与Qt::QueuedConnection类似,但是发送者将被阻塞,直到接收者处理完槽函数为止。
Qt::UniqueConnection:确保每个连接只建立一次,避免重复连接。
connect(const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoConnection)
【注意】
1)参数五:
跨线程:队列链接
同线程:直接链接
3、实现方式
为了学习,把信号槽分为三种实现方式:
● 自带信号→自带槽
● 自带信号→自定义槽
● 自定义信号
(一)自带信号→自带槽
(二)自带信号→自定义槽
Qt不可能内置所有执行的动作代码,特别是复杂的动作,需要开发者手动编写槽函数,这种方式也是所有连接方式中使用最多的。
槽函数实际上是一种特殊的成员函数,在声明的时候权限的作用主要是修饰其作为普通成员函数的使用效果,不影响信号槽的连接效果。
【注意】
1)自定义的槽函数:不可以只写声明,不实现,会直接报错的。 

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

相关文章:

  • MyBatis-Plus 进阶功能:分页插件与乐观锁的实战指南
  • org.apache.lucene.search.Query#rewrite(IndexSearcher)过时讲解
  • 框架式3D打印机结构设计cad【9张】三维图+设计说明书
  • Windows Server存储池,虚拟磁盘在系统启动后不自动连接需要手动连接
  • vulhub Earth靶场攻略
  • Java:采用mybatis+pagehealper优雅的实现分页功能
  • 文件操作认识
  • connect系统调用及示例
  • 使用Python实现单词记忆软件
  • 零基础学习性能测试第三章:jmeter性能组件应用(事件,并发,定时器)
  • 大模型 vs 轻量模型:架构与使用场景对比
  • 单片机ADC机理层面详细分析(一)
  • nfls dp 刷题 题解
  • C++平衡二叉搜索树易错点
  • C++ 类型萃取:深入理解与实践
  • git推送文件失败
  • vulhub-earth靶机攻略
  • 显式等待和隐式等待的区别
  • 伟淼科技李志伟:破解二代接班传承困局,系统性方案破除三代魔咒
  • pytorch学习笔记-自定义卷积
  • Bert项目--新闻标题文本分类
  • C# 位运算及应用
  • 【简述】C++11/14/17/20/23 中的关键新特性
  • 无源域自适应综合研究【3】
  • ts-node 深入全面讲解
  • IntelliJ IDEA 的“缩短命令行”:解决长类路径的利器
  • 《Moco: Momentum Contrast for Unsupervised Visual Representation Learning》论文精读笔记
  • CentOS 7 安装 MySQL 8.4.6(二进制包)指南
  • 学习嵌入式的第三十一天-数据结构-(2025.7.23)网络协议封装
  • Houdini快速模拟烟雾