пятница, 18 февраля 2011 г.

QtScript Bindings Generator

QtScript Bindings Generator -- это плагин, позволяющий использовать Qt-шные классы в скриптовом коде.

Как это выглядит?
 var w = new QWidget();
w.setGeometry(100, 100, 100, 100);
w.show();



Использовать  QtScript Bindings Generator очень удобно, если нужно оставить возможность пользователю вносить изменения в интерфейс или ход исполнения программы.





Где скачать?

Репозиторий QtScript Bindings Generator git://gitorious.org/qt-labs/qtscriptgenerator.git.


Инсталляция
Инсталляция не должна вызвать проблем так как хорошо описана в readme, опишу только ключевые моменты.
  • dll-ки должны были скомпилированный в одинаковом режиме (release или debug); 
  • dll-ки должны находится в папке /path/script/;
  • А подключать их нужно указав путь /parh. Для наглядности:

QStringList list = app.libraryPath();
list<<"/usr/lib/qtscript/";
QCoreApplication::setLibraryPaths(list) ; 
Хотя dll-ки находятся /usr/lib/qtscript/script/
Как это работает 
 Парсер проходится по классах библиотеки и генерирует новые классы, функции которых уже имеют вид

void QtScriptShell_QTabBar::actionEvent(QActionEvent*  arg__1)
{
    QScriptValue _q_function = __qtscript_self.property("actionEvent");
    if (!_q_function.isFunction() || QTSCRIPT_IS_GENERATED_FUNCTION(_q_function)
        || (__qtscript_self.propertyFlags("actionEvent") & QScriptValue::QObjectMember)) {
        QTabBar::actionEvent(arg__1);
    } else {
        QScriptEngine *_q_engine = __qtscript_self.engine();
        _q_function.call(__qtscript_self,
            QScriptValueList()
            << qScriptValueFromValue(_q_engine, arg__1));
    }
}
Следовательно если экземпляр скриптового класса  имеет "переопределенную" функцию, то вызывается она, если нет -- то вызывается функция класса.  

Комментариев нет:

Отправить комментарий