使用類成員函數作爲回調函數示例

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章