zoukankan      html  css  js  c++  java
  • 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 的系列文章:

  • 相关阅读:
    Photoshop教程,视频MP4格式转换为GIF格式
    pyqgis环境配置
    R 输出函数 格式化输出 打印函数
    linux ubuntu 更改终端的默认设置,终端大小,字体
    wps 显示所有的字符,将参考文献排序,插入目录
    在 word 中 怎么让表格旋转方向
    linux argc argv
    linux 命令行的快捷键 vim
    linux 操作系统,以及一般的操作系统 所看书籍
    win 10 快速启动 某些程序
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6781295.html
Copyright © 2011-2022 走看看