[Qt-interest] QScriptValue::setPrototype doens't work in Qt4.6?
Dong Tiger
idlecat511 at gmail.com
Mon Dec 28 06:44:28 CET 2009
Sorry, the sample code should be as following. And I've verified that method
1-4 work with Qt4.5.
#include <QScriptEngine>
#include <QCoreApplication>
#include <QScriptClass>
#include <QtDebug>
class ResolveClass : public QScriptClass {
public:
ResolveClass(QScriptEngine *engine) : QScriptClass(engine) {}
QScriptValue property(const QScriptValue &obj, const QScriptString &name,
uint id) {
qDebug() << name;
return QScriptValue();
}
QueryFlags queryProperty(const QScriptValue &obj, const QScriptString
&name, QueryFlags flags, uint *id) {
qDebug() << name;
return 0;
}
};
int main(int argc, char **argv) {
QCoreApplication app(argc, argv);
QScriptEngine engine;
ResolveClass resolve_class(&engine);
// method1: doesn't work.
// engine.globalObject().setScriptClass(&resolve_class);
// method2: doesn't work.
// engine.globalObject().setPrototype(engine.newObject(&resolve_class));
// method3: doesn't work.
// engine.setGlobalObject(engine.newObject(&resolve_class));
// method4: doesn't work.
// QScriptValue global = engine.newObject();
// global.setPrototype(engine.newObject(&resolve_class));
// engine.setGlobalObject(global);
// This works but not what I need.
QScriptValue global = engine.newObject();
global.setProperty("b", 200);
engine.setGlobalObject(global);
engine.evaluate("var a = 100; a = b;");
QScriptValue a = engine.globalObject().property("a");
qDebug() << a.toInt32() << "\n";
return 0;
}
2009/12/28 Dong Tiger <idlecat511 at gmail.com>
> Hi,
>
> My code that works with Qt4.5 doesn't work with 4.6. I wrote a short code
> to demonstrate the problem. What I want to do is trying
> to get ResolveClass::property being called when a global variable b is
> referred.
>
> #include <QCoreApplication>
> #include <QScriptEngine>
> #include <QScriptClass>
> #include <QtDebug>
>
> class ResolveClass : public QScriptClass {
> public:
> ResolveClass(QScriptEngine *engine) : QScriptClass(engine) {}
> QScriptValue property(const QScriptValue &obj, const QScriptString &name,
> uint id) {
> qDebug() << name;
> }
> };
>
> int main(int argc, char **argv) {
> QCoreApplication app(argc, argv);
> QScriptEngine engine;
> ResolveClass resolve_class(&engine);
>
> // method1: doesn't work.
> // engine.globalObject().setScriptClass(&resolve_class);
>
> // method2: works with 4.5 but not with 4.6.
> // engine.globalObject().setPrototype(engine.newObject(&resolve_class));
>
> // method3: doesn't work.
> // engine.setGlobalObject(engine.newObject(&resolve_class));
>
> // method4: doesn't work.
> // QScriptValue global = engine.newObject();
> // global.setPrototype(engine.newObject(&resolve_class));
> // engine.setGlobalObject(global);
>
> // This works but not what I need.
> QScriptValue global = engine.newObject();
> global.setProperty("b", 200);
> engine.setGlobalObject(global);
>
> engine.evaluate("var a = 100; a = b;");
> QScriptValue a = engine.globalObject().property("a");
> qDebug() << a.toInt32() << "\n";
> return 0;
> }
>
> I don't have Qt4.5 at hand so I didn't verify if these methods work with
> Qt4.5 except method2.
> Any idea of that? Thanks in advance.
>
> --
> Tiger
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.qt-project.org/pipermail/qt-interest-old/attachments/20091228/7d9ba8f4/attachment.html
More information about the Qt-interest-old
mailing list