Russian Qt Forum
Сентябрь 21, 2024, 14:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как вызвать функцию ?  (Прочитано 6834 раз)
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++ и передать параметры ?
Записан
heiheshang
Гость
« Ответ #1 : Май 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");
Записан
Nimbus
Гость
« Ответ #2 : Март 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 %)
Что я делаю не так? И как всё таки вызвать функцию?
Записан
gigabyte
Гость
Q+
« Ответ #3 : Март 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")");
« Последнее редактирование: Март 04, 2010, 11:51 от gigabyte » Записан
Nimbus
Гость
« Ответ #4 : Март 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? Неужели придётся его наследовать и переписывать этот метод? Есть ли другой путь решения этой проблемы?
« Последнее редактирование: Март 15, 2010, 10:50 от Nimbus » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.065 секунд. Запросов: 21.