当前位置: 首页 > 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.dtcms.com/a/312043.html

相关文章:

  • 深入解析Java Stream Sink接口
  • Design Compiler:Milkyway库的创建与使用
  • 1-7〔 OSCP ◈ 研记 〕❘ 信息收集▸主动采集E:SMB基础
  • 硬件-可靠性学习DAY1——系统可靠性设计指南:从原理到实践
  • Markdown 中的图表 Mermaid 与 classDiagram
  • Thread 中的 run() 方法 和 start() 方法的
  • 笔记:C语言中指向指针的指针作用
  • MQTT协议测试环境部署
  • 错误: 找不到或无法加载主类 原因: java.lang.ClassNotFoundException
  • (nice!!!)(LeetCode 每日一题) 2561. 重排水果 (哈希表 + 贪心)
  • UNet改进(29):记忆增强注意力机制在UNet中的创新应用-原理、实现与性能提升
  • 【嵌入式汇编基础】-ARM架构基础(三)
  • 动态规划解最长回文子串:深入解析与优化问题
  • 【redis】基于工业界技术分享的内容总结
  • JS的作用域
  • 第15届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2024年1月28日真题
  • sqli-labs:Less-20关卡详细解析
  • MFC 实现托盘图标菜单图标功能
  • 中州养老Day02:服务管理护理计划模块
  • 中之人模式下的虚拟主持人:动捕设备与面捕技术的协同驱动
  • 2025系规教材改革后,论文怎么写?
  • 错误处理_IncompatibleKeys
  • 在Linux上对固态硬盘进行分区、格式化和挂载的步骤
  • CH32V单片机启用 FPU 速度测试
  • MVVM——ArkUI的UI开发模式
  • 使用Python开发Ditto剪贴板数据导出工具
  • 使用C++实现日志(2)
  • MCP终极指南 - 从原理到实战(基础篇)
  • 面试实战,问题二十二,Java JDK 17 有哪些新特性,怎么回答
  • windows内核研究(软件调试-异常的处理流程)