qInstallMessageHandler 指向外部库方法的指针
qInstallMessageHandler pointer to external lib method
** 我关注了: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 内联,一切正常。
我正在了解为什么会这样。如果能帮助理解这一点,那就太好了。
成员函数(方法)与常规函数有很大不同。他们需要知道他们调用了哪个对象(this
指针)。因此,要修复它,请将 MyLogging
设为全局函数或静态成员函数。
注意:C++11
中还有mem_fn
可以解决上面的问题,但是qInstallMessageHandler
需要一个函数指针,mem_fn
创建包装对象的时候。也许这会在以后的 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 内联,一切正常。
我正在了解为什么会这样。如果能帮助理解这一点,那就太好了。
成员函数(方法)与常规函数有很大不同。他们需要知道他们调用了哪个对象(this
指针)。因此,要修复它,请将 MyLogging
设为全局函数或静态成员函数。
注意:C++11
中还有mem_fn
可以解决上面的问题,但是qInstallMessageHandler
需要一个函数指针,mem_fn
创建包装对象的时候。也许这会在以后的 Qt 版本中改变。