QtScript: Привязка функций к объекту, Контекст объекта |
Здравствуйте, гость ( Вход | Регистрация )
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); Удачи ! |
|
|
Текстовая версия | Сейчас: 24.11.2024, 7:50 |