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();