**我跟着:http://www.qt-coding.com/2013/08/06/tip-of-the-day-redirect-qdebug-to-a-file/
我创建了一个方法:
MyLogging(QtMsgType type, const QMessageLogContext &context, const QString &msg);
它位于我的主项目的外部库(我创建)中。
当我执行以下操作时:
qInstallMessageHandler(MyLib::MyLogging);
编译器说它无法进行转换:
error: C2664: 'QtMessageHandler qInstallMessageHandler(QtMessageHandler)' : cannot convert argument 1 from 'void (__cdecl MyLib::* )(QtMsgType,const QMessageLogContext &,const QString &)' to 'QtMessageHandler
没有可以进行转换的上下文'
但如果我将我的MyLogging方法与main.cpp一起内联,那么一切正常。
我正在关注为什么会这样。理解这一点的任何帮助都会很棒。
答案 0 :(得分:1)
成员函数(方法)与常规函数(方法)完全不同。他们需要知道他们要求的对象(this
指针)。所以要修复它,使MyLogging
成为全局函数或静态成员函数。
注意:mem_fn
中的C++11
可以解决上述问题,但qInstallMessageHandler
需要一个函数指针,当mem_fn
创建包装器对象时。也许这会在以后的Qt版本中发生变化。