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

【已解决】Qt发送信号后,槽函数没有响应

Qt发送信号后,槽函数没有响应

  1. 检查有没有连接正确的信号和槽函数,有时候,大意了,会写错
  2. 检查connect函数返回值,有没有连接成功
  3. 检查对象的创建方式,确保在信号发送前,以及槽函数接收前,发送和接收信号的对象有没有被析构。主要出现在,对象直接定义在函数内部的情况
  4. 检查有没有跨线程。如果是这样的话,你可以设置一下connect的第五个参数。如果接收者和发送者不在一个线程,第五个参数即连接类型自动使用Qt::QueuedConnection类型,而该类型存在的问题是,只有当控制权在槽函数所在线程的时间循环时,才会被调用,而不能保证实时性,即不能保证只要信号一触发,槽函数马上就能响应。为解决此问题,可以采用Qt::BlockingQueuedConnection类型进行连接,该连接类型使得发送完信号后发送者所在线程会被阻塞,直到槽函数运行完,保证了槽函数响应的实时性。但是需要注意这种方式必须要保证信号和槽不在同一个线程,否则程序会死锁。

解决

在检查完代码后,排除了前3条,只剩下了第4条。

我得信号确实是在新的线程中发送的。改用Qt::BlockingQueuedConnection模式绑定信号和槽。问题解决!

CreateTemplDialog dlg(templPtr, this);
connect(
    &dlg,
    &OiCreateTemplDialog::sigTemplEdited,
    d->_listModel,
    &OiTemplateListModel::onEditTempl,
    Qt::BlockingQueuedConnection);
connect(
    &dlg,
    &OiCreateTemplDialog::sigTemplEdited,
    d->_tableModel,
    &OiTemplateTableModel::onEditTempl,
    Qt::BlockingQueuedConnection);
dlg.exec();

http://www.kler.cn/a/105582.html

相关文章:

  • LeetCode75——Day17
  • 矢量图形编辑软件Illustrator 2023 mac中文版软件特点(ai2023) v27.9
  • 太烂的牌也要打完只为自己也不是为了其他什么原因。
  • 腾讯云国际站服务器端口开放失败怎么办?
  • Java零基础入门-逻辑运算符
  • 第七节——Vue中定义组件状态驱动视图
  • 25期代码随想录算法训练营第二天 | 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
  • 多线程---创建线程的七种方式
  • 自动化测试系列 —— UI自动化测试
  • 用图说话——流程图进阶
  • Python字典-dict “ “ ---记一次查缺补漏“ “
  • CMake教程-第 10 步:选择静态或共享库
  • LSKA(大可分离核注意力):重新思考CNN大核注意力设计
  • 鸿运主动安全监控云平台任意文件下载漏洞复现 [附POC]
  • postgis ST_CoverageInvalidEdges使用说明
  • 软考高级系统架构设计师系列之:案例分析典型试题四
  • [论文阅读]MVF——基于 LiDAR 点云的 3D 目标检测的端到端多视图融合
  • Java中会出现内存泄漏吗
  • 用汇编来理解堆栈
  • 力扣第406题 根据身高重建队列 c++ 贪心思维