如何在Android上自定义Qt Message Handler

时间:2015-01-30 00:33:59

标签: android qt debugging

我使用qSetMessagePattern()来自定义Qt应用程序的日志格式。在Windows上,qDebug()完全按照我的预期输出,但在Android上它之前添加了一些信息。 例如

qSetMessagePattern("[D] %{message}");
qDebug("Debug test");

Windows输出:

[D] Debug test

Android输出:

D/Qt  (30070): ..\project\filename.cpp:521 (void Class::method()): [D] Debug test

我已尝试制作自定义处理程序(并使用qInstallMessageHandler()安装它),但我不知道消息处理程序应如何在Android上输出调试信息

问题:如何让Android消息处理程序停止预先添加该信息,或者如何为Android编写自定义消息处理程序。

1 个答案:

答案 0 :(得分:5)

找到android的默认消息处理程序的代码,格式化是硬编码的,所以我写了一个类似的版本:

#include <android/log.h>

static void android_message_handler(QtMsgType type,
                                  const QMessageLogContext &context,
                                  const QString &message)
{
    android_LogPriority priority = ANDROID_LOG_DEBUG;
    switch (type) {
    case QtDebugMsg: priority = ANDROID_LOG_DEBUG; break;
    case QtWarningMsg: priority = ANDROID_LOG_WARN; break;
    case QtCriticalMsg: priority = ANDROID_LOG_ERROR; break;
    case QtFatalMsg: priority = ANDROID_LOG_FATAL; break;
    };

    __android_log_print(priority, "Qt", "%s", qPrintable(message));
}

并安装:

qInstallMessageHandler(android_message_handler);