Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

emit 大量信号后,界面卡住问题



  • 各位好,我遇到了一个问题。我有一个表 QTreeView 的子类,设置了一个 QStandItemModel 和 QSortFilterProxyModel。添加数据的逻辑逻辑是,点击导入数据后,请求被下发到了其他线程处理,处理完成,通过自定义的信号槽,emit到主线程,完成最后的这个界面显示插入列表工作,emit是基于项的,也就是导入上万条的话,会有上万次emit。当我测试时发现,emit了 20000 次信号后,会出现卡死状态。通过打印,发现主线程一直在处理槽函数,完全无法响应界面操作提示,我如何避免这种情况,我不需要给导入数据提速,只需要数据就能顺利完成其他画面的显示到界面,操作也可以画面进行。


  • Lifetime Qt Champion

    @Prophecy2021 Please use this forum if you want to ask using Chinese: https://forum.qt.io/category/37/chinese



  • This post is deleted!


  • 感谢大家的关注,我这边已经解决问题了。问题根本在于emit了太多的消息到主线程。所以,如果connect时使用了Qt::BlockingQueuedConnection,可以完美解决这个问题。这个参数正好解决我们当前场景遇到的问题。



  • 用阻塞队列会不会影响效率啊


Log in to reply