Arts-Union

Мастерская => Теория и практика => Тема начата: Altmer от 02 Май 2013, 20:37:49

Название: Вызов функций C++ из QtScript
Отправлено: Altmer от 02 Май 2013, 20:37:49
Казалось бы пустяковая вещь, но перерыв документацию и изрядно погуглив - ноль информации, только аналогичные тупые вопросы, на которые не менее тупые профи посылают читать документацию O.o

В доках полно примеров как оформить функцию, но примеры исключительно о Getter'ах или Setter'ах, что напрочь сбивает с толку, а как вызвать функцию именно как функцию (с параметрами или без) нигде не показано. Да кончено - на деле все просто, но совершенно не очевидно, для того кто этот QtScript первый раз в жизни видит...

А ларчик просто раскрывался, в функции setProperty параметр PropertyFlags надо оставить как есть по умолчанию (KeepExistingFlags), без всяких  QScriptValue::PropertyGetter | QScriptValue::PropertySetter, которые по сути превращают вашу функцию в свойство, после чего она не может быть вызвана в классическом смысле.

Привожу пример внедрения функции:

Код: Text
  1. QScriptValue getField(QScriptContext *ctx, QScriptEngine *eng)
  2. {
  3.     return 5;
  4. }
  5.  

Код: Text
  1. QScriptEngine scengine;
  2. scengine.globalObject().setProperty("getField", scengine.newFunction(getField));
  3. qDebug() << "is:" << scengine.evaluate("1 + 2 + getField()").toNumber();
  4.  

Результат = 8 )

ПС. Речь о 4-м Qt.
Название: Re: Вызов функций C++ из QtScript
Отправлено: Oleg от 02 Май 2013, 21:24:12
А у программеров частенько программы выходят чаще чем документация к ним., а то и вовсе без документации. А потом все додумывают.
Хотя мне показалось что Qt очень круто про документирован.
Название: Re: Вызов функций C++ из QtScript
Отправлено: Altmer от 03 Май 2013, 04:08:45
Да все там продокументировано, правда кривовато в данном случае )