1:为什么会有这个问题:
其实当我们真正开发一个有实体业务需求的界面软件的时候,就躲不开上面提到的问题——QT其他线程和UI主线程通信。原因是什么,耗时的操作不能再界面ui线程中操作执行,这样会让界面卡死,当然这不仅仅是QT有这个问题,MFC、安卓都是这样的。但现实是你躲不开业务的耗时操作,比如你点击一下按钮,可能按钮对应的底层业务逻辑需要执行一大堆东西,没办法不耗时。当然从另外一个角度看,也就是我们常说的解耦合,界面和后台业务逻辑本来就应该是解耦合的,不应该相互关联,但是解耦合这个东西说起来简单,但其实解耦合后我们又要考虑的问题是通信机制,解耦合不等于不联系。
在QT中,ui线程不能耗时,那好我们开线程,但是用户的交互是建立在ui线程的,ui线程执行的任何耗时操作都需要传递给我们的其他线程。当然我也好奇的是这么多框架设计对于UI的设计老是单线程的,非常困惑,如果ui界面压根没有耗时操作卡死的问题,这不就非常easy了,这个问题可以看看这篇博客:
https://www.cnblogs.com/findumars/p/5697173.html
lQT中可以通过以下几种方式实现UI线程和其他线程的通信!
2:解决方案:
2.1 信号槽机制
信号槽机制,但是注意哦!相对来说子线程给主线程发送信号相对简单,如果从主线程发给子线程,解决方案是什么,我们下面提到。
2.2事件机制
事件机制也非常简单,分为3步:
1.注册定义自己的事件
2.在ui线程重写事件处理方法
3.子线程发送事件