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

Qt 中信号与槽(signal-slot)机制支持 多种连接方式(ConnectionType)

Qt 中信号与槽(signal-slot)机制支持 多种连接方式(ConnectionType)

Qt 中信号与槽(signal-slot)机制支持 多种连接方式(ConnectionType),用于控制信号发出后如何调用槽函数,特别是在 跨线程 情况下。Qt 提供了以下几种连接方式(定义在 Qt::ConnectionType 枚举中):
🔹 1. Qt::AutoConnection(默认方式)
行为:根据信号发出者(sender)和接收者(receiver)是否在同一线程自动选择连接方式:

如果在 同一线程:等价于 Qt::DirectConnection(同步调用);

如果在 不同线程:等价于 Qt::QueuedConnection(异步调用)。

推荐使用场景:大多数场景下使用即可,尤其是在你不关心同步还是异步的具体方式时。

🔹 2. Qt::DirectConnection
行为:立即在发出信号的线程中 同步调用槽函数。

注意:如果 sender 和 receiver 不在同一线程,且槽函数操作 UI,会导致 线程不安全。

使用场景:适用于确定 sender 和 receiver 在同一线程,且你需要立即执行槽逻辑。

🔹 3. Qt::QueuedConnection
行为:异步调用,即信号发出时不会立即执行槽函数,而是将槽函数调用封装成事件,放入接收者线程的事件队列中。

使用场景:适用于 sender 和 receiver 不在同一线程,且希望异步处理。

🔹 4. Qt::BlockingQueuedConnection
行为:异步 + 阻塞式。槽函数在接收者线程中执行,但 发出信号的线程会阻塞,直到槽函数执行完毕。

前提:

sender 和 receiver 必须在不同线程;

否则会产生死锁。

使用场景:跨线程时需要等待槽函数执行完成(例如同步 RPC 调用)。

🔹 5. Qt::UniqueConnection
行为:不是独立的调用方式,而是一个 标志位,可与其他连接类型组合使用(例如 Qt::QueuedConnection | Qt::UniqueConnection)。

作用:防止重复连接,若该连接已存在,不再重复连接。

使用场景:防止槽函数被多次重复调用(通常在某些循环连接逻辑中非常有用)。

🔹 6. Qt::SingleShotConnection(Qt 6.0+)
行为:连接一次信号后,只触发一次槽函数调用。调用后自动断开连接。

使用场景:只希望在信号首次触发时响应一次,例如临时任务或一次性资源初始化。

组合用法:可以与其他连接类型一起使用,例如 Qt::SingleShotConnection | Qt::QueuedConnection。

在这里插入图片描述

相关文章:

  • 系统架构-云原生架构设计
  • Admyral - 可扩展的GRC工程自动化平台
  • 镜像和容器的管理
  • STM32--中断
  • k8s高可用集群,自动化更新证书脚本
  • 大模型范式转移:解码深度学习新纪元
  • $在R语言中的作用
  • linux_进程地址空间(虚拟地址空间)
  • Linux理解文件fd
  • LWIP的超时事件笔记
  • 处理PostgreSQL数据库事务死锁过程
  • 从机器人到调度平台:超低延迟RTMP|RTSP播放器系统级部署之道
  • Ubuntu20.04安装使用ROS-PlotJuggler
  • 注册 Broadcom 账号成功后,Broadcom 无法登录(最简单方案)
  • 16.Excel:数据收集
  • Linux 服务器静态 IP 配置初始化指南
  • C# NX二次开发:投影曲线和偏置曲线UFUN函数详解
  • leetcode hot100 技巧
  • ChatGPT-4o:临床医学科研与工作的创新引擎
  • maven基本介绍
  • 巴基斯坦全面恢复领空开放
  • 五粮液董事长:茅台1935已脱离千元价位带,五粮液在千元价位已逐步摆脱其他竞品纠缠
  • 罕见沙尘再度入川,官方:沙尘传输高度达到平流层,远超以往
  • 工程院院士葛世荣获聘任为江西理工大学校长
  • 陕西永寿4岁女童被蜜蜂蜇伤致死,当地镇政府介入处理
  • 七大交响乐团在沪“神仙斗法”,时代交响奏出何等时代新声