Russian Qt Forum

Qt => Qt Script, QtWebKit => Тема начата: heiheshang от Май 28, 2009, 07:55



Название: Как вызвать функцию ?
Отправлено: heiheshang от Май 28, 2009, 07:55
У меня есть скрипт
Код:
function on_formstart() 
{
}
// -------------------------------------------------------------------------------------------------
function on_button(button_name)
{
    if(button_name == "open_button") open_form(2);
    if(button_name == "edit_button") open_form(1);
    if(button_name == "new_button") open_form(0);
}
// -------------------------------------------------------------------------------------------------
function open_form(mode) форму
{
    form.Show();
}
Загружаю скрипт
Код:
QScriptValue module = script.evaluate(sModule);
как мне тепрь вызвать функцию on_button из программы на c++ и передать параметры ?


Название: Re: Как вызвать функцию ?
Отправлено: heiheshang от Май 28, 2009, 14:24
Сам себе и отвечу
Код:
QScriptValue result =  engine->script.evaluate(QString("on_button(") + sender()->name() + QString(")"));
if (result.isError())
aLog::print(aLog::Debug,"on_button error "+result.toString()+"\n");


Название: Re: Как вызвать функцию ?
Отправлено: Nimbus от Март 04, 2010, 11:36
У меня вопрос обратный.
Как вызвать C++ функцию из скрипта?
В мануале вообще что-то бред написан.
Типа
Код:
QScriptValue myFunction(QScriptContext *pcontext, QScriptEngine *pengine) {
   ... //какой-то код
   return scriptValue;
}

...
int main(int argc, char *argv[])
{
   ...
    //Код прямо из мануала
    QScriptValue fct = engine.scriptValue(myFunction);
    engine.globalObject().setProperty("myFunction", fct);
   ...
   return 0;
}
И уже в скрипте можно будет писать
Код:
var result = myFunction('bla-bla-bla');
Но у движка QScriptEngine нет метода scriptValue %)
Что я делаю не так? И как всё таки вызвать функцию?


Название: Q+
Отправлено: gigabyte от Март 04, 2010, 11:48
1. Делаешь обертку для функции (Вывод на QTextEditor)
Код:
static QScriptValue scripter_print_function(QScriptContext * context, QScriptEngine * engine) {
     ui.logBox->show();
    for(int i=0;i<=context->argumentCount()-1;++i)
        ui.logEdit->append(context->argument(i).toString());
    return QScriptValue(engine,0);
}
2. Регистрируэшь ее:
Код:
    script_engine->globalObject().setProperty("print",script_engine->newFunction(scripter_print_function,1));
3. Вызываешь в скрипте:
Код:
script_engine->evaluate("print("testing")");


Название: Re: Как вызвать функцию ?
Отправлено: Nimbus от Март 15, 2010, 10:41
И следующий вопрос. Как в скрипте передать ссылку на объект класса другому объекту?
Столкнулся с такой темой. Код на Qt:
Код
C++ (Qt)
QSqlQueryModel model;
model.setTable("table1");
model.select();
QTableView view;
 
view.setModel(&model); // Here
view.show();
 

То есть я создаю объекты в программе и передаю их в скрипт и там к ним обращаюсь по objectName.

Ну да... Я могу создать класс-обёртку для класса модели, наследованный от QObject и выполнить первую часть кода. Но вот как сделать, чтоб передавалась ссылка именно на модель в методе setModel класса QTableView? Неужели придётся его наследовать и переписывать этот метод? Есть ли другой путь решения этой проблемы?