JohannesMunk
11th May 2009, 17:38
Hi there!
I can't get a simple typedefed type (like typedef CDB_ID quint32;) to work correctly as a QScriptValue / QVariant.
When I try to call a member function returning a CDB_ID from a qtscript, it always returns zero. Can anybody point me in the right direction?
typedef int CDB_ID;
Q_DECLARE_METATYPE(CDB_ID)
class SClass : public QObject
{ Q_OBJECT
public slots:
int TestA() {return 5;}
CDB_ID TestB() {return 8;}
};
QScriptValue CDB_IDToScriptValue(QScriptEngine *engine,const CDB_ID &in)
{
return engine->newVariant(QVariant::fromValue(in));
}
void CDB_IDFromScriptValue(const QScriptValue &object, CDB_ID &out)
{
out = object.toVariant().value<CDB_ID>();
}
..
QScriptEngine eng;
qRegisterMetaType<CDB_ID>("CDB_ID");
qScriptRegisterMetaType<CDB_ID>(&eng, CDB_IDToScriptValue, CDB_IDFromScriptValue);
SClass* s = new SClass();
QScriptValue obj = eng.newQObject(s);
// Return value as CDB_ID .. always returns 0!
fun = eng.evaluate("function() {return this.TestB();}");
res = fun.call(obj,QScriptValueList());
CDB_ID cdbid = 4;
CDB_IDFromScriptValue(res,cdbid);
qDebug() << "B: " << res.toString() << res.isVariant() << cdbid << " error: " << eng.uncaughtException().toString();
Attached you will find a working demo of my problem!
Thx a lot!
Johannes
I can't get a simple typedefed type (like typedef CDB_ID quint32;) to work correctly as a QScriptValue / QVariant.
When I try to call a member function returning a CDB_ID from a qtscript, it always returns zero. Can anybody point me in the right direction?
typedef int CDB_ID;
Q_DECLARE_METATYPE(CDB_ID)
class SClass : public QObject
{ Q_OBJECT
public slots:
int TestA() {return 5;}
CDB_ID TestB() {return 8;}
};
QScriptValue CDB_IDToScriptValue(QScriptEngine *engine,const CDB_ID &in)
{
return engine->newVariant(QVariant::fromValue(in));
}
void CDB_IDFromScriptValue(const QScriptValue &object, CDB_ID &out)
{
out = object.toVariant().value<CDB_ID>();
}
..
QScriptEngine eng;
qRegisterMetaType<CDB_ID>("CDB_ID");
qScriptRegisterMetaType<CDB_ID>(&eng, CDB_IDToScriptValue, CDB_IDFromScriptValue);
SClass* s = new SClass();
QScriptValue obj = eng.newQObject(s);
// Return value as CDB_ID .. always returns 0!
fun = eng.evaluate("function() {return this.TestB();}");
res = fun.call(obj,QScriptValueList());
CDB_ID cdbid = 4;
CDB_IDFromScriptValue(res,cdbid);
qDebug() << "B: " << res.toString() << res.isVariant() << cdbid << " error: " << eng.uncaughtException().toString();
Attached you will find a working demo of my problem!
Thx a lot!
Johannes