今天在看代码的时候看到了回调函数的概念,不理解,然后查资料,查到好多说法。自己总结一下遇到的问题

1 QtMessageHandler qInstallMessageHandler(QtMessageHandler handler)//来自qt assistant
2 
3 typedef void (*QtMessageHandler)(QtMsgType, const QMessageLogContext &, const QString &);//来自qlogging.h的源码
4 Q_CORE_EXPORT QtMessageHandler qInstallMessageHandler(QtMessageHandler);//来自qlogging.h的源码
5 
6 //完整的函数声明应该是
7 QtMessageHandler qInstallMessageHandler(void (*QtMessageHandler)(QtMsgType, const QMessageLogContext &, const QString &));//显示的将形参定义成指向函数的指针

函数的形参可以是指向函数的指针在写函数声明时,因为直接使用函数指针会显得冗长而繁琐,所以使用类型别名简化写函数声明时使用到函数指针作为形参的 代码

这里*QtMessageHandler就是指向返回值为void,函数参数为(QtMsgType, const QMessageLogContext &, const QString &)的函数的函数指针

 

//重定向qdebug到自定义函数
defaultOutput=qInstallMessageHandler(outputLogMessage);//设置一个qtMessageHandler,这个qtMessageHandler是自定义的。在这里qtMessageHandler是指向outputLogMessage这个函数的指针
//返回之前的qtMessageHandler。 qtMessageHandler本质是一个函数指针。
//由qDebug、qWarning、qCritical、qFatal函数触发,它们处理的消息文本会被qInstallMsgHandler所指向的回调函数outputLogMessage截获,因此可以自己处理输出的消息文本

回调函数

  • 主函数:相当于整个程序的引擎,调度各个函数按序执行

  • 回调函数:一个独立的功能函数,如写文件函数

  • 中间函数:一个介于主函数和回调函数之间的函数,登记回调函数,通知主函数,起到一个桥梁的作用

1、主函数需要调用回调函数

2、中间函数登记回调函数(登记的过程:把回调函数的指针【地址】传给中间函数当作参数)

3、某一个事件触发

4、调用回调函数

这里outputLogMessage就是回调函数

qInstallMessageHandler是中间函数,它负责“登记”回调函数。

当qDebug()、qInfo()、qWarning()等函数触发时会调用outputLogMessage这个函数。

 

我的理解:回调就是回头再调用的意思

参考:回调函数(callback)是什么? – 知乎 (zhihu.com) //了解中间函数 讲的很好!

深入理解:回调函数_极客点儿的博客-CSDN博客_回调函数 //了解回调函数的工作流程

深入理解:回调函数_极客点儿的博客-CSDN博客_回调函数

原文地址:http://www.cnblogs.com/littleheadache/p/16823034.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性