Написание сценариев для приложений
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().
Последствия для безопасности приложения
Модель безопасности сценариев приложений на 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-5.12/qtjavascript.html