#QT实现多线程
相对于现在Qt的版本,多线程的写法已经有很多种了,我下面例子采用的重写Run函数的方法实现多线程的
这个方法也是我最近做项目 总结出来的一些方法,算是分享给大家。
步骤如下:
(1).添加新的类,命名随意。右击项目文件,选择addnew,图如下:
(2)选择类 C++ class。
(3) 命名类的名称 ,选择包含QObject。
(4).打开创建的.h文件。毕竟要使用线程,所以要先包含QThread头文件,再将类的继承由QObject改为QThread,然后声明run()函数。若你想主线程给子线程传递参数,则可以采用图中的方法。图中的是构造函数的声明,实现是在CPP文件中的。
①: 包含线程的头文件。
②: 重写继承关系,将public QObject改为 public QThread。
③: 在public下 写入run函数。
若想要在子线程中接收主线程的数据,则需要写入参数传递函数,如图中的红色椭圆框。对于要接收数据的变量则需要在private中写入新的变量用于存储。若想要子线程给主线程传递处理好的数据,则需要emit 信号 ,在头文件中添加signals,如:signals:
getData(QString s)
emit getData(“处理好的数据”)
(5).打开CPP文件,包含主线程的cpp和需要采用的模块的头文件,在这个cpp中只有run函数是运行在新的线程中(PS:之前不知道这个特性,还在savethread.cpp中写入多个函数,还用定时器信号与槽 触发,结果发现,其他的不怎么运行),重要的事情说三遍!!! 若是想把耗时操作写入多线程,一定要注意代码的逻辑。
(6)到这里线程的内容就写完了,接下来就需要在主线程中启动,调用它。
打开主线程的CPP,在需要采用线程的地方调用,然后启动线程,最后关闭线程。