为console.log设置QML类别

fis*_*eth 7 c++ qt qml

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

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

       qCDebug(mainEx) << "debug message";
       ...
    }
Run Code Online (Sandbox Code Playgroud)

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

void myMessageOutput(QtMsgType type, const QMessageLogContext &context,
                     const QString &msg)
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

在Qt 5中,还可以使用以下命令直接在QML中编写调试消息:

console.debug("debug message")
Run Code Online (Sandbox Code Playgroud)

但QMessageLogConext中的'cateory'总是'qml'.是否可以直接在QML中设置另一个类别?

Nik*_*nko 7

使用Qt 5.8开始,分类记录出QML盒子.

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

import QtQuick 2.8

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

    Component.onCompleted: {
      console.log(category, "message");
    }
}
Run Code Online (Sandbox Code Playgroud)


KD0*_*D07 4

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