使用qtscript覆盖运算符

时间:2010-07-20 09:33:42

标签: override qtscript

我想用qtscript做一个数学编辑器。 它将支持脚本中的数组计算。例如array1 + array2 = array3。({1,2,3} + {3,4,5} = {4,6,8}); 也许我需要覆盖operator +, 我查阅了QByteArray的例子,我重写了operator +,但是当我在Script中执行时,它无法调用,任何人都会给我一些建议吗?

bytearray.h
class ByteArrayClass : public QObject, public QScriptClass
{
public: 
   QByteArray &operator+(int n);
}

main.cpp
int main(int argc, char **argv)
{
QCoreApplication app(argc, argv);
QScriptEngine eng;
ByteArrayClass *baClass = new ByteArrayClass(&eng);
eng.globalObject().setProperty("ByteArray", baClass->constructor());
eng.evaluate("ba = new ByteArray(4))" 
eng.evaluate("ba+2;"); //this will not invoke override operator+.

ByteArrayClass *ba = new ByteArrayClass(&eng);
int n = 3;
*ba + n;    //but this can invoke the override operator+
}

如果无法实现,可能一种方法是将所有操作符替换为自定义函数。

1 个答案:

答案 0 :(得分:1)

据我所知,运算符不能在QtScript中重载,因为一般情况下Javascript中不允许运算符(例如,请参阅ECMA Script 4 - Progress和此Article)。

现在针对您的情况,您可以选择使用Add,Mult,...函数,或者选择一些不太受限制的脚本语言。