Qt 5.4 - QT_MESSAGELOGCONTEXT

mjk*_*k99 5 qt

从Qt 5.3切换到5.4,我的自定义消息处理程序突然接收到来自使用qDebug(),qWarning()和qCritical()的Qt库的行号和文件名.

文件表明这是Qt 5.4的变化.要获取此信息,您必须明确定义QT_MESSAGELOGCONTEXT.所以我做了.我下载了Qt 5.4源代码,配置它,编译它,并设置我的代码以使用新库.问题是,我仍然没有得到文件名和行号信息.

以下是我配置Qt构建的方法:

configure.bat -platform win32-msvc2010 -debug-and-release -nomake examples -nomake tests -opensource -opengl desktop -c++11 -no-strip -D QT_MESSAGELOGCONTEXT
Run Code Online (Sandbox Code Playgroud)

pep*_*ppe 9

您不需要使用该定义重建Qt,您需要使用该定义启用来构建应用程序.

行为改变背后的基本原理非常简单:您可能不希望敏感信息(函数名称,行号)泄漏到您的应用程序可能具有的调试或警告输出中.

因此,默认情况下,在发布版本中,功能名称和行​​号被清除.另一方面,它们仍然可用于调试版本,因此您实际上可能会避免使用该定义,只需在调试模式下重新编译应用程序即可.


如果要为发布版本启用函数名称和行号,请打开.pro应用程序的文件并添加类似的内容

DEFINES += QT_MESSAGELOGCONTEXT
Run Code Online (Sandbox Code Playgroud)

然后重新运行qmake并重建整个应用程序.