-
各位好,我遇到了一个问题。我有一个表 QTreeView 的子类,设置了一个 QStandItemModel 和 QSortFilterProxyModel。添加数据的逻辑逻辑是,点击导入数据后,请求被下发到了其他线程处理,处理完成,通过自定义的信号槽,emit到主线程,完成最后的这个界面显示插入列表工作,emit是基于项的,也就是导入上万条的话,会有上万次emit。当我测试时发现,emit了 20000 次信号后,会出现卡死状态。通过打印,发现主线程一直在处理槽函数,完全无法响应界面操作提示,我如何避免这种情况,我不需要给导入数据提速,只需要数据就能顺利完成其他画面的显示到界面,操作也可以画面进行。
-
@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,可以完美解决这个问题。这个参数正好解决我们当前场景遇到的问题。
-
@Prophecy2021 said in emit 大量信号后,界面卡住问题:
感谢大家的关注,我这边已经解决问题了。问题根本在于emit了太多的消息到主线程。所以,如果connect时使用了Qt::BlockingQueuedConnection,可以完美解决这个问题。这个参数正好解决我们当前场景遇到的问题。
老兄,我也遇到类似你的场景,目前emit很多次后,当主线程接收到子线程发送回来的信号,就会弹框。一旦弹框多了,就会出现主界面假死的情况,弹框提示一般以模态的方式显示,即QDialog dialog; dialog.exec();
按照你的方式去做,在connect的第五个参数添加Qt::BlockingQueuedConnection,好像还是会有假死的现象,请问您有什么办法可以优化吗?