1

QT上位机开发(多线程处理)

 8 months ago
source link: https://blog.csdn.net/feixiaoxing/article/details/135596815
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        目前大部分cpu都是多核cpu,所以如果不用多线程进行数据处理的话,实在是太浪费资源了。另外,很多的操作都是阻塞的,这样一旦操作卡住,画面就会卡住,客户的使用体验就会大打折扣。所以,对于复杂一点的软件,定时器+界面的方法基本就hold不住了,这个时候基本就要加上多线程来进行并发处理。多线程在使用中,很多时候都要更新界面数据,此时既可以通过共享内存来解决,也可以通过signals + emit的方法来解决,都是比较合适的。正好今天我们学到多线程处理,就可以看下qt下面多线程是怎么工作的,以及emit怎么使用。

1、创建一个qt widget工程

        第一步,还是先创建一个qt widget工程。

2、利用designer优化界面

        这一次因为涉及到显示部分。所以我们添加了两个按钮和一个textbox。用designer软件直接拖进来,调整一下大小即可。

1af2907fb46b4138bc96da42340407fe.png

3、设计头文件

        本次头文件设计,除了和之前一样,添加了按钮的回调函数之外,还需要添加一个signals的回调函数,这是之前没有的。signals是在MyThread添加的,到时候在线程函数里面由emit触发。当然,添加新类的时候,注意一定要添加Q_OBJECT这个宏。



newCodeMoreWhite.png

4、源文件实现

        源文件实现分成两个部分,一个部分是线程类MyThread的实现,它也是QtWidgetsApplication1里面的一个成员变量;另外一个就是窗口类QtWidgetsApplication1的实现。首先,我们看前者。在MyThread中,最重要的就是重写run函数,这也是线程的入口函数。另外,因为线程中会有部分内容,会触发窗口更新,所以这部分会使用关键字emit,到时候注意下即可。



newCodeMoreWhite.png

        剩下来的就是常规的窗口类代码。除了构造函数和析构函数外,其他的就是两个按钮的回调函数,以及signals的触发回调函数。大部分内容,我们之前都已经讲过,这部分不再赘述。唯一需要关注的,就是我们在构造函数执行的时候,需要通过connect把MyThread的result_ready和QtWidgetsApplication1中的handle_result绑定在一起,这样就相当于调用前者的时候,就会触发后者,使用起来还是十分方便的。



newCodeMoreWhite.png

5、编译和测试

        代码写好了,下面就可以开始测试了。没什么问题的话,我们单击ok按钮后,就应该可以看到textbox不停地有数字打印出来,如果看到这个场景,那么代表整个代码没有什么问题了,否则就要回头debug一下,看看是哪里运行出错了。

64691277defa4ec98278972f91e2c520.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK