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

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。

在这里插入图片描述

http://www.xdnf.cn/news/4546.html

相关文章:

  • Web 架构之负载均衡全解析
  • vue+vite难点和优化,及seo优化
  • 品质领航家装时代,亚新丽以匠心雕琢每一寸美好
  • GPT与LLaMA:两大语言模型架构的深度解析与对比
  • Kafka的消息保留策略是怎样的? (基于时间log.retention.hours或大小log.retention.bytes,可配置删除或压缩策略)
  • 强缓存与协商缓存的实现机制
  • AKS 网络深入探究:Kubenet、Azure-CNI 和 Azure-CNI(overlay)
  • 基于LVS实现负载均衡,对NAT模式的介绍和使用案例
  • LeetCode第190题_颠倒二进制位
  • 云蝠智能大模型语音交互智能体赋能电视台民意调研回访:重构媒体数据采集新范式
  • 2:点云处理—3D相机开发
  • 如何在Idea中编写Spark程序并运行
  • 【Bug经验分享】SourceTree用户设置必须被修复/SSH 主机密钥未缓存(踩坑)
  • Windows_PyCharm Python语言开发环境构建
  • 常见dp问题的状态表示
  • MCPHub:一站式MCP服务器聚合平台
  • CI/CD与DevOps流程流程简述(给小白运维提供思路)
  • Spring AI(1)—— 基本使用
  • QT中connect高级链接——指针、lambda、宏
  • 基于Qt的app开发第六天
  • 如何理解k8s中的controller
  • 缓存菜品-01.问题分析和实现思路
  • Carlink 技术:搭建汽车与手机的智能桥梁
  • GPAW安装流程——Ubuntu 系统(Python 3.8.10)
  • AI视觉质检的落地困境与突破路径
  • 工业现场ModbusTCP转EtherNETIP网关引领生物现场领新浪潮
  • gcloud 查看gke集群节点组是否开启了自动伸缩?
  • CAN报文逆向工程
  • node.js 实战——餐厅静态主页编写(express+node+ejs+bootstrap)
  • LangChain4j简介