我创建了一个消息处理程序来捕获消息:
void myMessageHandler(QtMsgType type, const QMessageLogContext & logContext, const QString & msg)
{
Q_UNUSED(logContext);
switch (type) {
case QtDebugMsg:
std::cerr << qPrintable(QString("qDebug: %1").arg(msg)) << std::endl;
break;
case QtWarningMsg:
std::cerr << qPrintable(msg) << std::endl;
break;
case QtCriticalMsg:
std::cerr << qPrintable(QString("qCritical: %1").arg(msg)) << std::endl;
break;
case QtFatalMsg:
std::cerr << qPrintable( QString("qFatal: %1").arg(msg) ) << std::end;
abort();
}
}
然后在 main 中安装消息处理程序:
int main()
{
qInstallMessageHandler(myMessageHandler);
// rest of main
}
然后我在警告案例上设置了一个断点。当断点被击中时,我将调用堆栈向上移动到触发警告的代码行。在我的一些应用程序中,我放置了一个 assert(false),所以我不会忘记设置断点。