Spec-Zone.ru › Qt 5.6

Написание скриптов для приложений

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().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qtjavascript.html

Spec-Zone.ru

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