五里坨网站建设,如何写网站建设方案书,重庆五号线金建站,四川建设网有限公司怎么样Qt发送信号后#xff0c;槽函数没有响应
检查有没有连接正确的信号和槽函数#xff0c;有时候#xff0c;大意了#xff0c;会写错检查connect函数返回值#xff0c;有没有连接成功检查对象的创建方式#xff0c;确保在信号发送前#xff0c;以及槽函数接收前#xff…Qt发送信号后槽函数没有响应
检查有没有连接正确的信号和槽函数有时候大意了会写错检查connect函数返回值有没有连接成功检查对象的创建方式确保在信号发送前以及槽函数接收前发送和接收信号的对象有没有被析构。主要出现在对象直接定义在函数内部的情况检查有没有跨线程。如果是这样的话你可以设置一下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();