開發環境: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);
}