Казалось бы пустяковая вещь, но перерыв документацию и изрядно погуглив - ноль информации, только аналогичные тупые вопросы, на которые не менее тупые профи посылают читать документацию
В доках полно примеров как оформить функцию, но примеры исключительно о Getter'ах или Setter'ах, что напрочь сбивает с толку, а как вызвать функцию именно как функцию (с параметрами или без) нигде не показано. Да кончено - на деле все просто, но совершенно не очевидно, для того кто этот QtScript первый раз в жизни видит...
А ларчик просто раскрывался, в функции setProperty параметр PropertyFlags надо оставить как есть по умолчанию (KeepExistingFlags), без всяких QScriptValue::PropertyGetter | QScriptValue::PropertySetter, которые по сути превращают вашу функцию в свойство, после чего она не может быть вызвана в классическом смысле.
Привожу пример внедрения функции:
QScriptValue getField(QScriptContext *ctx, QScriptEngine *eng)
{
return 5;
}
QScriptEngine scengine;
scengine.globalObject().setProperty("getField", scengine.newFunction(getField));
qDebug() << "is:" << scengine.evaluate("1 + 2 + getField()").toNumber();
Результат = 8 )
ПС. Речь о 4-м Qt.