开发环境:windows 10 Qt5.13.1
回调函数在不同模块的交互过程中使用非常广泛,比如说,B模块想获取A可以模块的进度,就可以使用回调函数来回调进度,但在使用的过程中,回调函数不能直接使用类的成员函数,因此必须中转一下,来调用类的成员函数,
具体代码如下
//CGenerateFile.h
//声明回调进度的函数
typedef void (*callbackProgress)(double, void *); //void *调用类成员函数
int createBin(int argc, char *argv[], void (*callbackProgress)(double, void *), void *pClass);
//CGenerateFile.cpp
int createBin(int argc, char *argv[], void (*callbackProgress)(double, void *), void *pClass)
{
//..........省略的代码
callbackProgress(total, (void *)pClass);
}
//-----------------------------------------
//CWorkThread.h
void callProgress(double progress);
//以静态函数作为回调用函数
static void callbackGenerateProgress(double progress, void *pClass);
void callbackProgress(double progress, void *pClass);
//CWorkThread.cpp
createBin(7, argv, callbackGenerateProgress, this);//调用CGenerateFile.h文件中的函数
//createBin(7, argv, callbackProgress, this);//错误,不能使用非静态函数作为回调函数
void CWorkThread::callbackGenerateProgress(double progress, void *pClass)
{
//这里不能直接使用callProgress(progress);函数
CWorkThread *pCallBack = (CWorkThread *)pClass;
pCallBack->callProgress(progress);
}
void CWorkThread::callProgress(double progress)
{
emit signalGenerateProgress(progress);
}