qInstallMessageHandler指向外部lib方法的指针

时间:2015-01-16 16:47:40

标签: c++ qt

**我跟着: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一起内联,那么一切正常。

我正在关注为什么会这样。理解这一点的任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

成员函数(方法)与常规函数(方法)完全不同。他们需要知道他们要求的对象(this指针)。所以要修复它,使MyLogging成为全局函数或静态成员函数。

注意:mem_fn中的C++11可以解决上述问题,但qInstallMessageHandler需要一个函数指针,当mem_fn创建包装器对象时。也许这会在以后的Qt版本中发生变化。