【问题标题】:Set a QML category for console.log为 console.log 设置 QML 类别
【发布时间】:2015-10-26 14:15:23
【问题描述】:

我是 Qt/QML 主题的新手,我正在尝试在我的 c++ 业务逻辑中安装一个日志处理程序。以下代码片段安装一个处理程序并设置一个特殊类别:

    int main(int argc, char *argv[])
    {
       qInstallMessageHandler(myMessageOutput);
       QLoggingCategory mainEx("main.ex");

       qCDebug(mainEx) << "debug message";
       ...
    }

结果是从 Qt 后端调用以下已安装的消息处理程序:

void myMessageOutput(QtMsgType type, const QMessageLogContext &context,
                     const QString &msg)
{
   ...
}

在 Qt 5 中,也可以直接在 QML 中编写调试消息:

console.debug("debug message")

但 QMessageLogConext 中的“类别”始终是“qml”。是否可以直接在 QML 中设置另一个类别?

【问题讨论】:

  • 很高兴知道您为什么需要更多类别。你想达到什么目的?您可以使用 QMessageLogConext 的其他成员 (file, function, line) 来获取更多有关日志记录语句来源的上下文。
  • 我想在一个应用程序中使用不同的 QML 扩展并且需要一个日志系统,我可以在其中打印依赖于其来源的消息。例如,如果在类别中写入“extension1”,并设置了 qDebug() 消息,则此类别(包括消息)将出现在自定义处理程序中。所以我可以使用类别找出 qDebug 消息产生的扩展名。

标签: c++ qt qml


【解决方案1】:

从 Qt 5.8 开始,在 QML 中开箱即用地分类日志记录 available

日志类别可以传递给 console.log() 和朋友作为 第一个论点。如果提供给记录器,则 LoggingCategory 的 名称将用作日志记录类别,否则将使用默认日志记录 将使用类别。

import QtQuick 2.8

Item {
    LoggingCategory {
        id: category
        name: "com.qt.category"
    }

    Component.onCompleted: {
      console.log(category, "message");
    }
}

【讨论】:

    【解决方案2】:

    我认为没有现成的解决方案可用于覆盖 QML 引擎中的默认类别。 Here 是可能的解决方案,有很好的解释和代码。

    【讨论】:

    • 是的,没错。在Qt & C++ 中有创建新类别的方法,但在 QML 中还没有。 @fischeth Here 你有另一个想法。
    猜你喜欢
    • 1970-01-01
    • 2015-01-25
    • 2020-09-09
    • 1970-01-01
    • 2014-04-13
    • 2020-06-24
    • 2017-08-27
    • 2017-02-27
    • 1970-01-01
    相关资源
    最近更新 更多