在开发过程中,碰到一些耗时的操作,如果直接在主线程里处理,UI将会出现假死的现象,甚至程序会崩溃,所以这类操作最好放在子线程当中。
这里有2个对象,一个是QThread,即子线程;另一个是继承于QObject的一个类,这个是要在子线程里运行的代码片段。
因为这个QObject非常基础,所以几乎所有继承于其他组件的自定义类,都间接地继承于QObject,都可以放入QThread中运行。
1、首先定义一个要在子线程跑的自定义类
ThreadObject.h:
#ifndef THREADOBJECT_H
#define THREADOBJECT_H
#include <QPrinter>
#include <QPainter>
#include <mytablewidget.h>
#include <QObject>
class ThreadObject : public QObject
{
Q_OBJECT
public:
explicit ThreadObject(QObject *parent = 0);
~ThreadObject();
signals:
void onRunCompletedSignal();
public slots:
void runOutputPdf(QString path,MyTableWidget * table,QString currentProgressName,QString currentProgressVer);
};
#endif // THREADOBJECT_H
ThreadObject.cpp:
#include "threadobject.h"
ThreadObject::T