workerthread.h
#ifndef WORKERTHREAD_H
#define WORKERTHREAD_H
#include <QThread>
class WorkerThread : public QThread
{
Q_OBJECT
public:
WorkerThread(QObject *parent = 0);
protected:
void run();
signals:
void done();
};
#endif // WORKERTHREAD_H
workerthread.cc
#include "workerthread.h"
WorkerThread::WorkerThread(QObject *parent) : QThread(parent){
}
void WorkerThread::run(){
for(int i = 0; i < 100000000; i++);
emit done();
}
其中
QObject *parent = 0;
只是声明构造函数中的参数类型,在这里可以写成
WorkerThread(QObject*);
// 或者
WorkerThread(QObject* parent);
均可通过编译。
WorkerThread::WorkerThread(QObject *parent) : QThread(parent){
}
调用QThread带有QObject*形参的构造函数,将WorkerThread中的parent指针初始化QThread构造函数中的参数。即派生类WorkerThread初始化:先调用父类QThread的构造函数(基类构造函数),先初始化QThread,再初始化WorkerThread。
Qt 自动回收是靠父子关系。父亲销毁了。他的孩子也销毁。所以为什么main函数里面main widget是分配在栈上的原因。其他new出来的东西都以这个widget作为父亲。当程序最后结束了,main widget弹栈。。父亲被销毁。。孩子跟着被销毁。。 所以如果你自己new 出来的。没有父亲,不删除就会造成内存泄漏。
// TODO java刚正式入C++,不知道理解对不对,待改