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

Qt 信号和槽正常连接返回true,但发送信号后槽函数无响应问题【已解决】

Qt 信号和槽正常连接返回true,但发送信号后槽函数无响应问题

  • 引言
  • 一、问题描述及解决方案
    • 1.1 问题描述
    • 1.2 解决方案
  • 二、Q_DECLARE_METATYPE 和 qRegisterMetaType

引言

Qt的信号和槽机制是一种用于对象间通信的松耦合方式。信号在特定事件发生时被发射,槽是响应信号的函数。这种机制替代了传统的回调函数,提供了更高的灵活性和类型安全。

Qt 信号与槽的使用详解 - 多种绑定形式、同步异步、Lambda表达式等:https://blog.csdn.net/qq_38204686/article/details/139702275

一、问题描述及解决方案

1.1 问题描述

  • 使用Qt5,connect函数返回值为true
  • 因为是跨线程,使用Qt::QueuedConnection连接,槽函数不响应信号,改为Qt::BlockingQueuedConnection后可正常响应

1.2 解决方案

  • connect之前使用qRegisterMetaType<xxx>("xxx");注册信号和槽函数的参数类型。

因为程序没有报这个:Make sure 'xxx' is registered using qRegisterMetaType(),所以没有考虑注册问题。之前遇到过类似的问题程序会打印以上信息提示,不知道为什么这次没有。找到一篇类似问题的博客,解释了Qt::BlockingQueuedConnection为什么可以:

Qt信号槽函数没有响应问题:https://blog.csdn.net/cheriyou_/article/details/136480462 - 参数类型为uint16_t也需要注册 (typedefine的类型也是自定义的数据类型)


  • 参考博文:

qt多线程编程,信号绑定成功,槽函数不响应问题排查处理及总结:https://blog.csdn.net/skyloveka/article/details/133853533
Qt次线程向主程序发送信号收不到的问题:https://blog.csdn.net/danshiming/article/details/124696536
槽函数收不到信号问题(信号的注册):https://blog.csdn.net/weixin_43197380/article/details/146248443

二、Q_DECLARE_METATYPE 和 qRegisterMetaType

  • Q_DECLARE_METATYPE 是一个宏,用于声明自定义类型可以被 Qt 的元对象系统识别。它通常在类的头文件中使用,告知 Qt 该类型的名称和结构,使其能够用于信号槽跨线程通信、QVariant 存储等场景。但仅声明不会自动注册到运行时类型系统中。
  • qRegisterMetaType是一个运行时函数,用于将类型注册到 Qt 的元对象系统中。它必须在程序运行时调用(如 main() 函数或类静态初始化块中),确保类型信息可用于动态操作(如信号槽跨线程传递)。

Q_DECLARE_METATYPE适用于需要用 QVariant 的存储和转换。需要通过信号槽跨线程传递,或者需要与 QObject::property() 或 QML 交互,必须使用qRegisterMetaType

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

相关文章:

  • AI原生数据库:告别SQL的新时代来了?
  • 飞书推送工具-自动化测试发送测试报告一种方式
  • Linux 动静态库的制作和使用
  • [硬件电路-121]:模拟电路 - 信号处理电路 - 模拟电路中常见的难题
  • FastAPI--一个快速的 Python Web
  • 网络安全突发事件应急预案方案
  • 2024年网络安全预防
  • 电脑手机热点方式通信(上)
  • 智能手表:小恐龙游戏
  • Linux自主实现shell
  • C#开发入门指南_学习笔记
  • Ubuntu系统VScode实现opencv(c++)图像翻转和旋转
  • Java 注解详解(含底层原理)
  • Vue 3.0 Composition API:重新定义组件逻辑的组织方式
  • 算法训练营DAY46 第九章 动态规划part13
  • 全球化 2.0 | 中国香港教育机构通过云轴科技ZStack实现VMware替代
  • stm32103如果不用32k晶振,那引脚是悬空还是接地
  • SLAM中的非线性优化-2D图优化之零空间实战(十六)
  • Linux iptables防火墙操作
  • Apache Doris数据库——大数据技术
  • SpringBoot怎么查看服务端的日志
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博舆情数据可视化分析-热词情感趋势树形图
  • sqli-labs:Less-21关卡详细解析
  • 【BTC】挖矿难度调整
  • 人类学家与建筑师:区分UX研究和项目管理的需求分析
  • 隧道照明“隐形革命”:智能控制如何破解安全与节能双重命题
  • 【iOS】strong和copy工作流程探寻、OC属性关键字复习
  • 电脑手机热点方式通信(下)
  • 「iOS」————weak底层原理
  • 「iOS」————SideTable