[Еще вариант] Отправляем объект из внешней библиотеки в скрипт.
В первом варианте код был жестко завязан на интерфейсный класс плагина.
Как оказалось, можно обойтись и без него.
Для этого надо:
1. В плагине к конструктору добавить служебную конструкцию Q_INVOKABLE. Т.е. должно получиться так:
Q_INVOKABLE explicit ScriptObject(QObject *parent = 0);
А в основной программе нужно убрать строку с приведением qobject_cast и заменить строку с регистрацией объекта в движке на вот такую:
QScriptValue scObj = engine.newQObject(plugin->metaObject()->newInstance(), QScriptEngine::ScriptOwnership);
И всё! Никакой привязки к интерфейсу!
Теперь буду разбираться с тем, как бы всё это безобразие соединять сигналами. Как-нибудь по динамичнее.
upd: Не забываем в после засовывания объекта в скрипт его там зарегистрировать.
engine.globalObject().setProperty("ScObj", scObj);
Отправляем объект из внешней библиотеки в скрипт
В Qt, как известно, есть замечательная вещь как QScript, позволяющая использовать ECMA скрипт.
В данный скриптовый движок возможно запихивать как отдельные функции, так и целые объекты.
А можно ли запихать в движок объект из внешней библиотеки (.dll, .so etc)?
Оказывается, что можно.