QJSEngineには印刷機能は実装されていません。自分で実装する必要があります。幸いなことに、QObjects を記述して、スクリプトで使用できるようにすることができます。( 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: 何年も潜んでいた後の最初の投稿。素晴らしい回答を書くためのヒントを読みましたが、間違いや悪いことをした場合は教えてください。
コードがあなたと共にありますように