关于回调函数的概念,之前有写过(传送点),这里不再赘述。
本文结合Log日志输出,进一步理解回调函数的执行过程。
首先附上demo的可运行程序代码(下载传送点),运行环境为VS2015+Qt5.8.0,不一样的自行修改即可,旨在帮助初学者走通程序,理解过程,也不用在后文中粘大段的代码...
回调的两个主体为Test类和Log类,在Log类中定义函数指针类型:
typedef void(*Callback)(LogLevel level, const char *msg);
传递函数指针给Log类是发生在main中,main中的回调函数如下:
void logCallback(LogLevel level, const char *msg) {
logTest::instance->showLogMsg(msg);
}
Test类作为显示及控制层,通过信号与槽实现外界触发:
void logTest::on_button_1_clicked() {
LOGD("Parameter = %d", count);
count++;
}
进而使Log类达成调用条件,调用回调函数指针,将结果(即输出内容)返回给主体,而并不关心主体接下来会用自己传回去的结果做什么,主体接收到输出内容,在界面中显示,即完成了Log日志输出这一过程:
void logTest::showLogMsg(const char *msg)
{
ui.textBrowser->append(msg);
}