Qt5的多线程表面上比Qt4稍微复杂一点,其实很好用. 这样的设计,我个人认为其兼容性很好,主线程是主干道,信号与槽是匝道,子线程是高速.
目录
准备工作:
在头文件中包含 QThread
1 建立一个新类,
这个类就是要在子线程中工作.
右键工程, 添加新文件-> C++-> C++ class,基类选QObject.
然后在类中添加复杂/耗时的操作,与其他线程通信的话,使用形参即可.
2 创建对象
在主线程的函数中实例化子类对象和线程
这两个指针需要在头文件中声明,然后在.cpp中实例化
as = new subClass; // 不能指定父对象,否则无法move
myThread = new QThread(this); // 子线程
3 移交子线程并启动
将子类对象移交给子线程
as->moveToThread(myThread); // 移交给线程
myThread->start(); // 启动线程,但是没有启动函数
4 启动子类函数
子线程中的子类函数启动,必须通过信号与槽的方式启动,.
首先,在主线程中建立信号与槽的连接:
connect(this,&MainWindow::signalxxx, as, &myThread::slotxxx); // 需要在主函数头文件中声明与子类函数参数和返回值一致的信号
然后,在主线程中需要调用子线程函数的地方,抛出信号即可!
emit signalxxx( arg1, ...);
5 回收资源
关闭程序时,需要回收线程资源:
在析构函数中增加:
myThread->quit();
myThread->wait();
delete myThread;