我正在使用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();
答案 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);