【问题标题】:Replace logging backend for console.debug() console.warn()替换 console.debug() 的日志记录后端 console.warn()
【发布时间】:2015-01-10 15:20:56
【问题描述】:

Qt Quick uses qDebug 执行日志记录,其中标准 Javascript 日志记录方法映射到 Qt 日志类型

console.log()   -> qDebug()
console.debug() -> qDebug()
console.info()  -> qDebug()
console.warn()  -> qWarning()
console.error() -> qCritical()

此时,您不再区分 debug() 和 info()。

有没有什么方法可以直接在 QML 引擎中为 Javascript 方法注册自定义记录器,而无需经过 qDebug 和 qInstallMessageHandler

【问题讨论】:

标签: qt logging qml qtquick2 qdebug


【解决方案1】:

虽然 globalObjectQQmlEngine 中是只读的,但其中存储的值不是。所以你可以修改globalObjectconsole属性。你可以在 C++ 和 QML 中做到这一点。这是 QML 中一个简单的运行示例:

import QtQuick 2.3
import QtQuick.Controls 1.2

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("Console example")

    Column {
        anchors.centerIn: parent

        Button {
            text: "debug"
            onClicked: {
                console.log = console.debug
            }
        }

        Button {
            text: "exception"
            onClicked: {
                console.log = console.exception
            }
        }

        Button {
            text: "print something"
            onClicked: {
                console.log( "logging something" );
            }
        }
    }
}

前两个按钮发生变化,第三个按钮的作用是通过修改 console.log 方法。 C++ 看起来像这样(我不能在这里复制我的所有代码,抱歉,但它应该能让你继续前进,而且效果很好):

// in a header file
class HelperObject: public QObject {
    Q_OBJECT
    // ...
    public slots:
        myLog( QString aMessage );
};

// in an implementation file
QQmlEngine   qmlEngine;
HelperObject helperObject;
QJSValue     helperValue = qmlEngine.newQObject( &helperObject );
QJSValue     consoleObject( qmlEngine.globalObject().property( "console" ) );

if (!consoleObject.isUndefined()) {
    QJSValue myLogValue = helperValue.property( "myLog" );

    consoleObject.setProperty( "log", myLogValue );
}

【讨论】:

  • 非常非常好的主意。你能添加一个代码 sn-p 如何用 C++ 做到这一点吗?我不需要一个完整的运行示例,而是一个起点。非常感谢!
  • 感谢您给我足够的声誉,所以我可以发表评论。我在答案中添加了 C++ 示例。
猜你喜欢
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 2011-11-05
  • 1970-01-01
  • 2020-07-06
  • 2017-03-24
  • 2016-05-22
  • 2014-10-20
相关资源
最近更新 更多