QJSEngine-暴露类和抛出错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QJSEngine-暴露类和抛出错误相关的知识,希望对你有一定的参考价值。
[我正在尝试创建一个标准的JS库,它的形状大多像Qbs(使用已弃用的QScriptEngine
)和QJSEngine
,因此制作Qt软件的人可以在其插件JS环境中添加诸如文件操作之类的东西。 >
您可以看到存储库here
我已经向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>
但是它仍然不会抛出错误(只是默默地失败):
#include <QObject> #include <QString> #include <QFile> #include <QIODevice> #include <QFileInfo> #include <QtScript> namespace Qbs4QJS class BinaryFile : public QObject, protected QScriptable Q_OBJECT public: Q_ENUM(QIODevice::OpenModeFlag) Q_INVOKABLE BinaryFile(const QString &filePath, QIODevice::OpenModeFlag mode = QIODevice::ReadOnly) m_file = new QFile(filePath); // should check for false and throw error with jsEngine->throwError(m_file->errorString()); if (!m_file->open(mode)) context()->throwError(m_file->errorString()); private: QFile *m_file = nullptr; ; // end namespace Qbs4QJS
我对此也可能感到困惑,但是似乎它正在使用
QScriptEngine
,但我想摆脱它。
完成添加QJSEngine
可以使用的类的最佳方法是什么,该类具有cpp定义的方法,这些方法可能在调用引擎中引发错误?
我正在尝试使用QJSEngine创建一个标准的JS库,其形状大体上类似于Qbs(使用过时的QScriptEngine),因此制作Qt软件的人可以向...添加文件操作之类的东西...]
QJSEngine
有任何关联。因此,您只能执行以下一种选择:- 如果可以确保整个应用程序中只有一个
QJSEngine
实例,请将引擎实例存储在静态变量中。以上是关于QJSEngine-暴露类和抛出错误的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin 协程协程异常处理 ① ( 根协程异常处理 | 自动传播异常 | 在协程体捕获异常 | 向用户暴露异常 | 在 await 处捕获异常 | 非根协程异常处理 | 异常传播特性 )
Kotlin 协程协程异常处理 ① ( 根协程异常处理 | 自动传播异常 | 在协程体捕获异常 | 向用户暴露异常 | 在 await 处捕获异常 | 非根协程异常处理 | 异常传播特性 )