QJSEngine 没有实现打印功能。您必须自己实现它。幸运的是,您可以编写 QObject 并使它们在您的脚本中可用。(参见http://doc.qt.io/qt-5/qjsengine.html的“QObject 集成”部分)
这是我的做法:
创建一个继承自 QObject 的类 JSConsole:
你自己的控制台类
jsconsole.h
#ifndef JSCONSOLE_H
#define JSCONSOLE_H
#include <QObject>
class JSConsole : public QObject
{
Q_OBJECT
public:
explicit JSConsole(QObject *parent = 0);
signals:
public slots:
void log(QString msg);
};
#endif // JSCONSOLE_H
jsconsole.cpp
#include "jsconsole.h"
#include <QDebug>
JSConsole::JSConsole(QObject *parent) :
QObject(parent)
{
}
void JSConsole::log(QString msg)
{
qDebug() << "jsConsole: "<< msg;
}
使用它
现在您使用QJSEngine.newQObject在 js 引擎中创建一个代理对象。之后,您将其添加到您的全局对象并使用它。
QJSEngine engine;
JSConsole console;
QJSValue consoleObj = engine.newQObject(&console);
engine.globalObject().setProperty("console", consoleObj);
QJSValue result = engine.evaluate("console.log('test');");
错误记录
当我刚刚在我的 js 文件中出现拼写错误时,我已经在我的 c++ 代码中搜索了很长时间。以下代码段将有助于避免这种情况。
if (result.isError())
{
qDebug() << "result: " << result.property("lineNumber").toInt() << ":" << result.toString();
}
PS:潜伏多年后的第一篇文章。我已经阅读了有关编写出色答案的提示,但如果我犯了一些错误/坏事,请告诉我。
愿代码与你同在