Spec-Zone.ru › Qt 5.15

Создание скриптуемых приложений

Qt поддерживает скриптинговую работу с приложениями с помощью JavaScript. Следующие руководства и справки охватывают аспекты программирования с JavaScript и Qt.

Классы для скриптинга

Следующие классы добавляют возможности скриптинга в приложения Qt.

QJSEngine

Окружение для оценки JavaScript-кода

QJSValue

Выступает в качестве контейнера для типов данных Qt/JavaScript

QJSValueIterator

Итератор в стиле 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.15/qtjavascript.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API