qt - qt替换 console.debug() 控制台的日志后端警告( )

  显示原文与译文双语对照的内容

快速使用 qDebug 执行日志记录,其中标准的Javascript日志方法是maped日志类型


console.log() -> qDebug()


console.debug() -> qDebug()


console.info() -> qDebug()


console.warn() -> qWarning()


console.error() -> qCritical()



此时,你将区分 debug() 和 info() 之间的区别。

在QML引擎中直接为Javascript方法创建定制记录器,不需要遍历和 qInstallMessageHandler

时间: 原作者:

虽然 globalObject 在QQmlEngine中是只读的,但存储在其中的值不。 因此,你可以修改的控制台属性 of 。 在 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 );


}



...