Написание скриптов для приложений
Qt предоставляет поддержку написания приложений со скриптами JavaScript. Следующие руководства и справки охватывают аспекты программирования с JavaScript и Qt.
Классы для скриптинга
Следующие классы добавляют возможности скриптинга в приложения Qt.
Окружение для оценки кода JavaScript |
|
Выступает в качестве контейнера для типов данных Qt/JavaScript |
|
Итератор по типу Java для QJSValue |
Основные возможности
Для оценки кода скрипта вы создаете QJSEngine и вызываете его функцию evaluate(), передавая код скрипта (текст) для оценки в качестве аргумента.
QJSEngine engine;
qDebug() << "the magic number is:" << engine.evaluate("1 + 2").toNumber(); Значение возврата будет результатом оценки (представленным как объект QJSValue); его можно преобразовать в стандартные типы C++ и Qt.
Пользовательские свойства могут быть доступны скриптам путем их регистрации в движке скриптов. Это наиболее удобно сделать, задав свойства глобального объекта движка скриптов:
engine.globalObject().setProperty("foo", 123);
qDebug() << "foo times two is:" << engine.evaluate("foo * 2").toNumber(); Это помещает свойства в среду скрипта, делая их доступными для кода скрипта.
Делаем доступным объект QObject для движка скриптов
Любой экземпляр, основанный на QObject, может быть сделан доступным для использования в скриптах.
Когда QObject передается функции QJSEngine::newQObject(), создается объект-обёртка Qt Script, который может быть использован для предоставления сигналов, слотов, свойств и дочерних объектов QObject скриптам.
Вот пример того, как сделать экземпляр подкласса QObject доступным для кода скрипта под именем "myObject":
QJSEngine engine;
QObject *someObject = new MyObject;
QJSValue objectValue = engine.newQObject(someObject);
engine.globalObject().setProperty("myObject", objectValue); Это создаст глобальную переменную с именем myObject в среде скрипта. Переменная служит прокси для базового объекта C++. Обратите внимание, что имя переменной скрипта может быть любым; то есть, оно не зависит от QObject::objectName().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qtjavascript.html