为console.log设置一个QML类别

10

我对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")

在QMessageLogContext中,'category'始终为'qml'。是否可以直接在QML中设置另一个类别?


1
知道你需要更多类别的原因会很好。你想要实现什么?您可以使用QMessageLogConext的其他成员(file,function,line)来获取更多有关日志记录语句来源的上下文。 - KD07
我想在一个应用程序中使用不同的QML扩展,并需要一个日志系统,可以根据其来源打印消息。例如,如果在类别中写入“extension1”,并设置了qDebug()消息,则此类别(包括消息)将出现在自定义处理程序中。因此,我可以使用类别找出qDebug消息产生的扩展名。 - fischeth
2个回答

11

从Qt 5.8开始,QML中可以使用分类日志记录

日志类别可以作为第一个参数传递给console.log()等函数。如果传递给日志记录器,则将使用LoggingCategory的名称作为日志类别;否则将使用默认的日志类别。

import QtQuick 2.8

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

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

4

我认为在QML引擎中,没有现成的解决方案可以覆盖默认类别。 这里提供了一个可能的解决方案,其中包含非常好的解释和代码。


1
没错,这是真的。在[Qt & C++](https://blog.qt.io/blog/2014/03/11/qt-weekly-1-categorized-logging/)中有创建新类别的方法,但在QML中还没有。@fischeth [这里](https://dev59.com/wXbZa4cB1Zd3GeqPBQsc)你可以找到另一个想法。 - Tarod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接