2011-05-20 12 views
5

Estoy tratando de usar la secuencia de comandos en la Qt, aquí hay un código muy simple.La secuencia de comandos en Qt no devuelve el valor correcto

QCoreApplication a(argc, argv); 

double x; 

cout<<"Please enter a number: "; 
cin>>x; 
QFile file("cube.js"); 
if(!file.open(QIODevice::ReadOnly)) 
    abort(); 

QTextStream in(&file); 
in.setCodec("UTF-8"); 
QString script=in.readAll(); 
file.close(); 
QScriptEngine interpreter; 
QScriptValue operand(&interpreter,x); 
interpreter.globalObject().setProperty("x",operand); 
QScriptValue result=interpreter.evaluate(script); 
cout<<"The result is "<<result.data().toInt32()<<endl; 

return a.exec(); 

El contenido de los cube.js es sólo una línea:

return x*x*x; 

corro este programa, pero siempre devuelve el cero. ¿Podría alguien decirme qué tiene de malo? El contenido del archivo es correcto leer.

Best Regards,

Respuesta

6

que está llamando retorno sobre el nivel global de Javascript, que no está permitido. Puede usar QScriptEngine::hasUncaughtException y QScriptValue QScriptEngine::uncaughtException para determinar los errores en el código de javascript.

Además, está llamando al result.data() que es para almacenar datos internos. Así el guión debe ser

x*x*x 

Y la impresión:

cout<<"The result is "<<result.toInt32()<<endl; 
+0

... o aún mejor: result.toNumber(). – hmuelner

Cuestiones relacionadas