我正在使用 aQJSEngine
使应用程序可编写脚本。我希望 JavaScript 端能够修改用户界面。我现在的主要问题是从 JavaScript 访问 Qt API。
为了创建小部件,我添加了一个createWidget()
包装器,它使用QUILoader
:
// JavaScript
var w = helpers.createWidget("QPushButton");
// C++
QJSValue helpers::createWidget(QString type)
{
QUILoader ld;
return engine.newQObject(ld.createWidget(type));
}
我还注册了来自 的所有枚举qt_getQtMetaObject()
,这似乎处理了来自 的所有命名空间级枚举qnamespace.h
。不过,它看起来不像是公共 API 的一部分。
我真的应该手动处理这些东西还是我错过了什么?是不是有一个registerAllTheThings()
函数可以创建一个全局Qt
对象,通过它可以使用 Qt API?
如果没有,那我就有问题了。我可以QWidget
用 a 创建 s QUILoader
,但我找不到创建其他对象的方法,例如 a QStandardItemModel
。我认为所有 Qt 类都已经通过 注册qRegisterMetaType()
,但它们不是:QMetaType::type("QStandardItemModel")
通过返回失败UnknownType
。同样,我是否缺少一些注册所有内容的初始化函数调用?