首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QJSEngine:打印到控制台

QJSEngine:打印到控制台
EN

Stack Overflow用户
提问于 2015-08-16 21:26:51
回答 2查看 2.5K关注 0票数 0

我正在从QScriptEngine (这是不推荐的)迁移到QJSEngine,并且我看到我无法使用print

代码语言:javascript
复制
  QJSEngine engine;

  QJSValue val = engine.evaluate(
        "print('123');"
        );

  if (val.isError()){
     qDebug() << "error: " << val.toString();
  }

  qDebug() << "val: " << val.toVariant();

产出如下:

代码语言:javascript
复制
error:  "ReferenceError: print is not defined"

QScriptEngine中,它是有效的。

那么,在QJSEngine中打印控制台的方法是什么呢?在医生里什么都找不到。我试着使用console.log,但是console也没有定义。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-04 21:44:26

打印函数不是在QJSEngine中实现的。你必须自己实现它。幸运的是,您可以编写QObjects并使它们在脚本中可用。(见http://doc.qt.io/qt-5/qjsengine.html的“http://doc.qt.io/qt-5/qjsengine.html集成”一节)

我就是这样做的:

创建一个从JSConsole继承的类QObject:

您自己的控制台类

jsconsole.h

代码语言:javascript
复制
#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

代码语言:javascript
复制
#include "jsconsole.h"
#include <QDebug>


JSConsole::JSConsole(QObject *parent) :
    QObject(parent)
{
}

void JSConsole::log(QString msg)
{
    qDebug() << "jsConsole: "<< msg;
}

使用它

现在,您可以使用QJSEngine.newQObject在js引擎中创建代理对象。之后,将其添加到全局对象并使用它。

代码语言:javascript
复制
QJSEngine engine;
JSConsole console;
QJSValue consoleObj =  engine.newQObject(&console);
engine.globalObject().setProperty("console", consoleObj);
QJSValue result = engine.evaluate("console.log('test');");

误差测井

当我在js文件中出现拼写错误时,我已经搜索了很长时间c++代码中的错误。下面的片段将有助于避免这种情况。

代码语言:javascript
复制
if (result.isError())
{
    qDebug() << "result: " << result.property("lineNumber").toInt() << ":" << result.toString();
}

PS:经过多年的潜伏后的第一篇文章。我读过关于写好答案的技巧,但是如果我犯了错误/做了坏事,请告诉我。

愿密码与你同在

票数 5
EN

Stack Overflow用户

发布于 2016-05-03 18:25:25

从Qt5.6开始,解决方案就更容易了:可以安装Javascript扩展。其中一个扩展是提供print函数的控制台:

代码语言:javascript
复制
QJSEngine myEngine;
myEngine.installExtensions(QJSEngine::ConsoleExtension);
myEngine.eval("print(1 + 2)");
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32040101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档