首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在我的代码中指出触发QObject::connect: code队列参数的调用在Qt5中的位置?

如何在我的代码中指出触发QObject::connect: code队列参数的调用在Qt5中的位置?
EN

Stack Overflow用户
提问于 2017-12-04 00:07:30
回答 1查看 191关注 0票数 0

在我的Qt5应用程序中,我在运行时从Qt本身接收一条日志消息,如下所示:

QObject::connect:无法对'QHostAddress‘类型的参数排队

我知道如何使用Q_DECLARE_METATYPE(QHostAddress)宏或qRegisterMetaType<QHostAddress>("QHostAddress")类修复此消息的原因,这不是这个问题的意义所在。

我想知道的是,如何在我的代码中指出触发此消息的调用的确切位置?

由于该消息没有附带文件/行号,而且由于我似乎无法在Qt5内部设置调试器断点,所以我无法找出导致此消息的原因。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-04 00:22:43

我创建一个消息处理程序来捕获消息:

代码语言:javascript
复制
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中安装消息处理程序:

代码语言:javascript
复制
int main() 
{
   qInstallMessageHandler(myMessageHandler);

// rest of main
}

然后我在警告箱上设置了一个断点。当命中断点时,我沿着调用堆栈走到触发警告的代码行。在我的一些应用程序中,我使用了一个断言(False),所以我不会忘记设置断点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47624731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档