关于QtScript:
以前因为项目中需要,写了一小段js代码:
var obj = new Object();
obj.msgbox.text = "it is succeed !";
obj.msgbox.exec();
当然,单纯添个msgbox就胡乱用是会遭雷劈的。在构造函数中当然会有相应的初始化动作
/*
读js脚本,执行脚本。。。省略
*/
obj =globalObj.property("obj");
QMessageBox *msgBox = new QMessageBox;
msgBox->setWindowTitle(tr("jsshow expriment"));
msgBox->setObjectName("msgbox");
QScriptValue qsmsgBox =m_pInterpreter->newQObject(msgBox,QScriptEngine::AutoOwnership);
obj.setProperty("msgbox",qsmsgBox);
使用qtscripttool 调试,一直报错,提示msgbox是未知类型。一直找不到问题。因为该加的都加了啊。。
后来才知道,程序(不管是一般桌面程序还是浏览器)加载js 的顺序是先加载global object 里面的内容,也就是说,在这个场景下,程序会先使用msgbox再执行构造函数中的add property方法。
现在改变了使用方法,js 代码 如下:
var obj = new Object();
obj.myslot = function()
{
obj.msgbox.text = "it is succeed !";
obj.msgbox.exec();
}
然后再在构造函数中加上一句:
m_pExecJSCall = ui->menu_Edit->addAction("executejavascript call");
qScriptConnect(m_pExecJSCall,SIGNAL(triggered()),obj,myslot);
执行的动作都是一样的,但是因为 方法体内定义的方法会在使用时才被加载,而使用它是在加了msgbox 属性以后,所以就可以成功执行了!
本人也是一个初学者,希望能够跟大家多多交流。 qq aslistener@sina.com 邮箱亦是 希望跟朋友们多多交流!