Написание скриптов для приложений
Qt поддерживает использование JavaScript для написания скриптов в приложениях. Следующие руководства и справочные материалы охватывают аспекты программирования на JavaScript и Qt.
Классы для написания скриптов
Следующие классы добавляют возможности написания скриптов в приложения Qt.
Среда для оценки кода JavaScript |
|
Работает с примитивными типами в семантике 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().
Последствия для безопасности приложения
Модель безопасности для написания скриптов на JavaScript аналогична модели для кода C++: пользователь устанавливает доверенные скрипты для выполнения так же, как и приложения Qt.
Для сохранения доверия пользователей разработчики приложений не должны оценивать произвольный код JavaScript. Песочница движка JavaScript является лишь семантическим барьером. Скрипт оценивается в том же процессе и с теми же привилегиями, что и остальная часть приложения, и использует ту же память. Вследствие этого объекты C++, доступные скриптам, доступны без дополнительных мер безопасности.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qtjavascript.html