Russian Qt Forum

Qt => Qt Script, QtWebKit => Тема начата: iRQSX от Июнь 08, 2011, 08:41



Название: Запуск сриптовой функции из файла с параметрами
Отправлено: iRQSX от Июнь 08, 2011, 08:41
Доброго времени суток! есть токая вот функция
Код
C++ (Qt)
void scriptengine::loadModule(const QString &moduleName){
   QWidget *dialog;
   QUiLoader loader;
   QFile file(m_configpath+"/"+moduleName+".ui");
   if (!file.open(QFile::ReadOnly)){
       return;
   }
   dialog = loader.load(&file);
   file.close();
   file.setFileName(m_configpath+"/"+moduleName+".js");
   if (!file.open(QFile::ReadOnly)){
       return;
   }
   QTextStream filets(&file);
   QScriptValue scv = m_se.newQObject(dialog);
   m_se.globalObject().setProperty("ui",scv);
   scv = m_se.newQObject(&m_dbe);
   m_se.globalObject().setProperty("db",scv);
   m_se.evaluate(filets.readAll());
   file.close();
   //m_se.evaluate("run()");// работает
 
   QScriptValue fun = m_se.evaluate("(run())");
   QScriptValueList args;
   args << 1 << 2;
   QScriptValue threeAgain = fun.call(QScriptValue(), args);//работает
   fun = m_se.evaluate("(runab(a, b))");
   QScriptValue threeAgain = fun.call(QScriptValue(), args);//не работает
}
и скрпипт:
Код
Javascript
function run(){
   ui.pushButton.clicked.connect(on_pushButton_clicked);
   ui.show();
}
function runab(a, b){
    ui.show();
   return a+b;
}
 
function on_pushButton_clicked(){
   db.createConnection();
   db.executeQuery("CREATE TABLE testtest22 char, ccddd bit) WITH (  OIDS = FALSE);");
}
 
Почему  run() работает, а  runab(a, b) нет?
PS щас выяснил что запуск run() происходит еще на этопе
Код:
QScriptValue fun = m_se.evaluate("(run())");
тогда как пользоваться функциями???


Название: Re: Запуск сриптовой функции из файла с параметрами
Отправлено: asvil от Июнь 08, 2011, 11:42
Если Ви хотите получить доступ к функции определенной в скрипте, поступить можно так:
Код:
QScriptValue fun = m_se.globalObject().value("runab");
fun.call();


Название: Re: Запуск сриптовой функции из файла с параметрами
Отправлено: iRQSX от Июнь 08, 2011, 12:25
Если Ви хотите получить доступ к функции определенной в скрипте, поступить можно так:
Код:
QScriptValue fun = m_se.globalObject().value("runab");
fun.call();
точнее:
Код
C++ (Qt)
QScriptValue fun = m_se.globalObject().property("runab");
   QScriptValueList args;
   args << 1 << 7;
   qDebug()<<fun.call(QScriptValue(), args).toInteger();
то есть не  m_se.globalObject().value, а m_se.globalObject().property
благодарю за совет