Написание сценариев для приложений
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.11/qtjavascript.html