如何在QScript引擎中定义'window'对象 JavaScript窗口对象

如何在QScript引擎中定义'window'对象 JavaScript窗口对象,javascript,c++,qt,Javascript,C++,Qt,在JavaScript中,浏览器有一个全局对象窗口。此对象具有一些有趣的特性: var any = 5; console.log(window.any); 窗口对象充当名称空间,所有变量都在其中创建 在使用Qt的QScriptEngine时,此行为(默认情况下)不处于活动状态,Qt是一个通用JS引擎,不具有特定于浏览器的功能 问题是: 如何获取QScriptEngine以拥有此窗口对象?(具有类似行为) 尝试 假设一个简单的C++项目,包括 Qt(当前5.7),下面的代码解析了一些JS并显示

在JavaScript中,浏览器有一个全局对象
窗口
。此对象具有一些有趣的特性:

var any = 5;
console.log(window.any);
窗口
对象充当名称空间,所有变量都在其中创建

在使用Qt的
QScriptEngine
时,此行为(默认情况下)不处于活动状态,Qt是一个通用JS引擎,不具有特定于浏览器的功能

问题是:

如何获取
QScriptEngine
以拥有此
窗口
对象?
(具有类似行为)


尝试

假设一个简单的C++项目,包括 Qt(当前5.7),下面的代码解析了一些JS并显示了结果:

#include <QDebug>
#include <QScriptEngine>
#include <QCoreApplication>

//Logger class, for console.log
class Logger: public QObject
{
    Q_OBJECT
public:
    Logger( QObject*parent = nullptr): QObject(parent) {}

public slots:
    void log(const QString& str){ qDebug() << str; }
};

#include "test.moc"

int main(int argn, char* args[])
{
    QCoreApplication app(argn, args);
    QScriptEngine engine;
    // Logger
    Logger logger;
    QScriptValue loggerResult = engine.newQObject(&logger);
    engine.globalObject().setProperty("console", loggerResult);

    // TODO CONFIG HERE FOR WINDOW OBJECT
    //engine.globalObject().setProperty(QString("window"), 
    //    engine.newObject()); //Does not work, obviously

    engine.evaluate("var test=42; console.log(test); console.log(window.test)");
    if (engine.hasUncaughtException()) 
    {
        int line = engine.uncaughtExceptionLineNumber();
        QScriptValue error = engine.uncaughtException();
        QStringList errorStr = engine.uncaughtExceptionBacktrace();
        qDebug() << "Exception at:" << line << ":" << error.toString();
    }
}
#包括
#包括
#包括
//Logger类,用于console.log
类记录器:公共QObject
{
Q_对象
公众:
记录器(QObject*parent=nullptr):QObject(parent){}
公众时段:

void log(const QString&str){qDebug()您可以将
分配给
窗口
变量:

engine.evaluate("window=this; var test=42; console.log(test); console.log(window.test)");
输出:

“42”
“42”

Qt博客中有一篇关于的博文