如何使Javascript可以访问C ++类

时间:2014-06-26 14:13:57

标签: javascript c++ qt

我正在使用Qt 4.8和QScriptEngine。

我想从Javascript中创建一个可用的C ++类,但我没有得到它。

我已经知道如何公开该类的单个对象。

我的班级看起来像这样:

#include <QtCore/QObject>

class Tada: public QObject
{
  Q_OBJECT
public:

  Tada(int i=0): m_i(i){};

public slots:
  int giveNumber();

private:
  int m_i;
};

在我设置脚本引擎的位置我可以添加类似

的内容
static Tada tada;
engine->globalObject().setProperty("tada", engine->newQObject(&tada));

这使得对象tada在脚本中可用,因此我可以像

一样使用它
tada.giveNumber();

但是,如果我想在脚本本身创建Tada对象,如:

var mt = new Tada(34);
mt.giveNumber();

1 个答案:

答案 0 :(得分:1)

首先创建一个构造函数,如:

QScriptValue constructTada(QScriptContext * context, QScriptEngine * engine)
{
    Tada * pTada = new Tada;

    if (context->argumentCount() > 0)
    {
        // Set any properties...
        pTada->setNumber(context->argument(0).toInt32());
    }

    return engine->newQObject(pTada);
}

然后你需要把这个功能放到脚本环境中:

QScriptEngine engine;
QScriptValue ctor = engine.newFunction(constructTada);
engine.globalObject().setProperty("Tada", ctor);