crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QtScript: Привязка функций к объекту, Контекст объекта
JohnZ
  опции профиля:
сообщение 13.2.2020, 13:55
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 139
Регистрация: 19.7.2014
Пользователь №: 4190

Спасибо сказали: 10 раз(а)




Репутация:   0  


Всем Здравия !

Помогите решить такую проблемку ...
Есть объект списка и/или формы и как полагается их скрипт(ы)
Объекты создаются в С-шном коде и затем подгружается и компилится его скрипт, т е на момент компиляции объект уже существует в engine.

Пример скрипта ...

Раскрывающийся текст


function frm2233ButtonPress(bn)
{
var p1,p2,p3,ret;
if (bn == "tbPost")
{
app.loadForma(214); // Справочник контрагентов
frm214.initForm(1);
ret = frm214.exec();
p1 = frm214.Value(1);
p2 = frm214.Value(2);
delete frm214;
if (ret == 0) return;

frm2233.findChild("sbPost").value = p1; // Установить контрагента
frm2233.findChild("lbPost").text = p2;
}
else
if (bn == "tbOp")
{
app.loadForma(875); // Справочник операций
frm875.initForm(1);
ret = frm875.exec();
p1 = frm875.Value(1);
p2 = frm875.Value(2);
delete frm875;
if (ret == 0) return;

frm2233.findChild("sbOp").value = p1; // Операция
frm2233.findChild("lbOp").text = p2;
}
}



Есс-но после компиляции функции становятся глобальными, и при достаточном их количестве в дебагере образуется что-то
типа "помойки", где найти то что нужно весьма проблематично. Вот если функцию объявить в скрипте вот так ...

frm2233.ButtonPress = function(bn)

то она окажется где ей и положено быть, внутри объекта.
Вопрос заключается в следующем, - возможно ли при сохранении стиля скриптов 1-го варианта, получить результат 2-го варианта ?
Возможно ли это вообще, и если да, то что в С++ нужно (до)сделать при компиляции скриптов ?

Сообщение отредактировал JohnZ - 13.2.2020, 13:56
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_JohnZ_*
сообщение 9.6.2020, 23:51
Сообщение #2





Гости








    


Решено !!!

QScriptContext *context = engine->currentContext();

QScriptValue valApp = engine->globalObject().property(Object);

context->setActivationObject(valApp);
context->setThisObject(valApp);

result = engine->evaluate(script, ScriptName);

Удачи !
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.3.2024, 13:51