Название: Расширение API для QtScript Отправлено: yoyo от Апрель 03, 2008, 14:14 Имеется таблица, привязанная к движку QScripEngine. Из ячеек можно производить расчет формул, в которых участвуют другие ячейки. Сейчас обращение к ячейкам происходит в виде: "=Cell('A1').value + Cell('B3').value", а хотелось бы описывать такие формулы в сжатом виде: "=A1 + B3".
Можно ли намекнуть парсеру (например регистрацией своего класса), что обработку A1..Z9999 я беру на себя, и не надо вызывать throwNotDefined(memberName)? Прямой путь добавления в globalObject около 300000 property мне кажется совсем не привлекательным. Название: Re: Расширение API для QtScript Отправлено: Sergeich от Апрель 03, 2008, 18:19 А что мешает сделать предобработку формулы перед ее передачей в QScriptEngine::evaluate?
Название: Re: Расширение API для QtScript Отправлено: yoyo от Апрель 04, 2008, 09:22 Ничего не мешает, но очень хочется переложить на QScriptEngine всю грязную работу. Вопрос в том, можно ли в принципе раширять движок своими объектами не используя globalObject().setProperty(...).
Название: Re: Расширение API для QtScript Отправлено: Sergeich от Апрель 04, 2008, 14:21 Есть возможность расширять движок с помощью плагинов (QScriptExtensionPlugin), но я не уверен что это решит твою проблему.
Название: Re: Расширение API для QtScript Отправлено: Tonal от Апрель 07, 2008, 08:14 Если выражение "чистое" - т.е. его вычисление имеет побочников, и его безболезненно можно перезапустить, то можно отлавливать исключение NotDefined(memberName), добавлять memberName и перезапускать вычисление.
Во многих скриптовых движках - том же python-е - можно определить специальную функцию, которая будет зваться, когда интерпретатор не нашёл какого-то имени. Странно, если QtScript такого нет... :( Название: Re: Расширение API для QtScript Отправлено: Dodge от Апрель 08, 2008, 16:55 ммм... а может просто стоит выражение через QRegExp протаскивать, подменять "A1 + B3" на "Cell('A1').value + Cell('B3').value"?
Название: Re: Расширение API для QtScript Отправлено: yoyo от Апрель 10, 2008, 09:28 Любая предобработка влечет за собой усложнение отладки скриптов. Необходимо будет предусматривать обратные преобразования из "Cell('A1').value" в "A1". Корректировать позицию указателя, где произошла ошибка. При этом нужно четко различать, кто ввел преобразование, - пользователь или мой "предпарсер".
Решение есть! Оно на поверхности! Люблю Qt все больше и больше :) Код: MyCell *cellScript = new MyCell(engine); Теперь любые свойства глобального объекта, которые не понимает движок, будут проходить через мои обработчики! Всем откликнувшимся спасибо. Название: Re: Расширение API для QtScript Отправлено: Dodge от Апрель 11, 2008, 13:12 в таком случае следует отметить, что это работать будет начиная с Qt 4.4
|