在我的Qt5应用程序中,我在运行时从Qt本身接收一条日志消息,如下所示:
QObject::connect:无法对'QHostAddress‘类型的参数排队
我知道如何使用Q_DECLARE_METATYPE(QHostAddress)宏或qRegisterMetaType<QHostAddress>("QHostAddress")类修复此消息的原因,这不是这个问题的意义所在。
我想知道的是,如何在我的代码中指出触发此消息的调用的确切位置?
由于该消息没有附带文件/行号,而且由于我似乎无法在Qt5内部设置调试器断点,所以我无法找出导致此消息的原因。
发布于 2017-12-04 00:22:43
我创建一个消息处理程序来捕获消息:
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
}然后我在警告箱上设置了一个断点。当命中断点时,我沿着调用堆栈走到触发警告的代码行。在我的一些应用程序中,我使用了一个断言(False),所以我不会忘记设置断点。
https://stackoverflow.com/questions/47624731
复制相似问题