Записки программиста Программирование и не только

20Мар/120

[Еще вариант] Отправляем объект из внешней библиотеки в скрипт.

В первом варианте код был жестко завязан на интерфейсный класс плагина.

Как оказалось, можно обойтись и без него.
Для этого надо:
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);
Метки записи: , , Нет комментариев
20Мар/120

Отправляем объект из внешней библиотеки в скрипт

В Qt, как известно, есть замечательная вещь как QScript, позволяющая использовать ECMA скрипт.
В данный скриптовый движок возможно запихивать как отдельные функции, так и целые объекты.
А можно ли запихать в движок объект из внешней библиотеки (.dll, .so etc)?

Оказывается, что можно.

Метки записи: , , , Читать полностью