Qt on Android:将Qt调试信息输出到logcat中

    版权全部 foruok 。如需转载敬请注明出处(http://blog.csdn.net/foruok)

    假设你在目标 Android 设备上执行了 Qt on Android 应用,你可能希望看到程序输出的日志信息。 Android SDK 中有 adb 工具,当你连接了目标设备,能够使用 adb logcat 查看 Android 设备上应用输出的日志。

    先介绍一下 adb 工具的使用。一般我经常使用下列命令:

  • adb logcat ,查看手机或其它设备上输出的全部日志
  • adb logcat -v time ,让日志带时间信息
  • adb logcat -v time -s Tag 。仅仅显示指定标签的日志信息,同一时候显示日志时间。比方 adb logcat -v time -s qnote 。仅仅显示标签为 qnote 的日志信息;假设你想同一时候过滤多个标签,能够用英文半角逗号分隔标签。如 adb logcat -v time -s qnote,test 。

    为了把日志导入 Android 系统的日志系统(一个环形内存日志系统)。我写了一个辅助函数,方便大家使用。

    先看头文件 qDebug2Logcat.h :

#ifndef QDEBUG2LOGCAT_H
#define QDEBUG2LOGCAT_H

#ifdef ANDROID
void installLogcatMessageHandler(const char *TAG);
#else
#define installLogcatMessageHandler(TAG)
#endif

#endif // QDEBUG2LOGCAT_H

    非常easy,我声明了一个函数 installLogcatMessageHandler ,假设未定义 ANDROID 宏。它就是一个空宏,什么也不干;否则就安装一个消息过滤器。接管 Qt 输出的消息,转发到 Android 的日志系统中。

    看源文件 qDebug2Logcat.cpp :

#if defined(ANDROID)
#include "qDebug2Logcat.h"
#include <android/log.h>
#include <QDebug>
#include <QByteArray>

static const char *g_TAG = 0;
static void messageOutput2Logcat(QtMsgType type,
    const QMessageLogContext &context,
    const QString &msg)
{
    int prio = ANDROID_LOG_VERBOSE;
    QByteArray localMsg = msg.toLocal8Bit();
    switch (type) {
    case QtDebugMsg:
        prio = ANDROID_LOG_DEBUG;
        break;
    case QtWarningMsg:
        prio = ANDROID_LOG_WARN;
        break;
    case QtCriticalMsg:
        prio = ANDROID_LOG_INFO;
        break;
    case QtFatalMsg:
        prio = ANDROID_LOG_FATAL;
        abort();
    }
    __android_log_write(prio, g_TAG, localMsg.data());
}

void installLogcatMessageHandler(const char *TAG)
{
    g_TAG = (TAG == 0 ? "QDebug" : TAG);
    qInstallMessageHandler(messageOutput2Logcat);
}

#endif

    实现也非常easy,调用 qInstallMessageHandler 把 messageOutput2Logcat 设置为 Qt 应用的默认消息处理器。 messageOutput2Logcat 函数则将 Qt 的调试消息级别映射到 Android 的日志级别上并调用 __android_log_write() 函数将日志信息写入 Android 日志系统。 

    你能够直接使用这两个文件,增加到你的项目中就可以。

然后在 main() 函数前包括 qDebug2Logcat.h 头文件,在 main() 函数体第一行增加以下的代码:

   installLogcatMessageHandler("yourLogTag");

    好了,一切就绪了。


   版权全部 foruok 。如需转载敬请注明出处(http://blog.csdn.net/foruok)

我翻译的大神 BogDan Vatra 的 Qt on Android 系列文章:

    我的关于 Qt on Android 的系列文章:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值