线程回调
ShowWebViewForm.h
#include <QtWidgets/qwidget.h>
#include <QDialog>
#include <QThread>
//线程执行基类
class threadRunClass
{
public:
virtual void threadCallbackFunc() = 0;
};
//线程类,执行线程基类的回调函数
class exportThread : public QThread
{
Q_OBJECT
public:
exportThread() {
m_pFuncRun = nullptr;
}
void run() {
if (m_pFuncRun != nullptr) {
m_pFuncRun->threadCallbackFunc();
}
}
void setCallback(threadRunClass* pFunc) {
m_pFuncRun = pFunc;
}
private:
threadRunClass* m_pFuncRun;
};
//解析json数据执行类
class ShowWebViewForm :public QDialog, threadRunClass
{
Q_OBJECT
public:
explicit ShowWebViewForm(QWidget* parent = 0);
public:
void analysisJsonDataExecute();
void threadCallbackFunc() override;
private:
//解析Json数据
void startAnalysisJsonData();
void delThread();
private:
exportThread* m_exportThread;
};
ShowWebViewForm.cpp
ShowWebViewForm::ShowWebViewForm(QWidget *parent)
{
m_exportThread = nullptr;
}
//启动线程
void ShowWebViewForm::analysisJsonDataExecute()
{
if (m_exportThread == nullptr)
{
m_exportThread = new exportThread();
m_exportThread->setCallback(this);
}
m_exportThread->start();
//程序进入消息循环,等待可能输入进行响应。当应用程序退出的时候exec()的值就会返回。
//在exec()中,Qt接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。
int res = exec();
// 等待进程完成后,再delete
m_exportThread->wait();
delThread();
}
//线程回调函数
void ShowWebViewForm::threadCallbackFunc()
{
//解析Json数据
//通俗的说把需要干的事情放到这里完成
//上篇文章《QT解析Json数据》中的入口函数
startAnalysisJsonData();
}
//delete线程
void ShowWebViewForm::delThread()
{
if (m_exportThread)
{
if (m_exportThread && m_exportThread->isRunning())
{
m_exportThread->exit();
}
delete m_exportThread;
m_exportThread = nullptr;
}
}