Я пытаюсь создать стандартную библиотеку JS, которая в основном имеет форму, подобную Qbs (которая использует устаревший QScriptEngine
) с QJSEngine
, поэтому люди, которые делают программное обеспечение Qt, могут добавлять такие вещи, как файловые операции, в свой плагин JS environment.
Вы можете увидеть репо здесь
У меня есть базовые c классы, открытые для движка JS, например:
QJSEngine jsEngine;
jsEngine.installExtensions(QJSEngine::AllExtensions);
jsEngine.globalObject().setProperty("BinaryFile", jsEngine.newQMetaObject(&Qbs4QJS::BinaryFile::staticMetaObject));
но я, кажется, могу понять, как получить ссылку на QJSEngine
внутри функции, чтобы я мог выдать ошибку:
Q_INVOKABLE BinaryFile(const QString &filePath, QIODevice::OpenModeFlag mode = QIODevice::ReadOnly) {
m_file = new QFile(filePath);
if (!m_file->open(mode)) {
// how do I get jsEngine, here
jsEngine->throwError(m_file->errorString());
}
}
Мне бы хотелось если бы я мог каким-то образом получить вызывающий механизм изнутри функции, чтобы класс мог быть представлен, например, нескольким отдельным экземплярам механизма.
Я видел QScriptable и это метод engine()
, но не могу понять, как его использовать.
Я добавил
Depends { name: "Qt.script" }
в свой файл qbs и
#include <QtScript>
, но он все еще не выбрасывает ошибка с этим (просто молча) Он использует QScriptEngine
, от которого я пытаюсь избавиться.
Каков наилучший способ выполнить sh задачу добавления класса, который может использовать QJSEngine
, с cpp -определенные методы, которые могут генерировать ошибки в вызывающем движке?