我正在使用QJSEngine使应用程序成为可脚本化的。我希望JavaScript端能够修改用户界面。我现在的主要问题是从JavaScript访问Qt。
为了创建小部件,我添加了一个使用QUILoader的createWidget()包装器
// 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吗?
如果没有,那我就有问题了。我可以用QUILoader创建QWidget,但是我找不到创建其他对象的方法,比如QStandardItemModel。我以为所有的Qt类都已经通过qRegisterMetaType()注册了,但事实并非如此:QMetaType::type("QStandardItemModel")返回UnknownType导致失败。再说一次,我是不是错过了一些注册所有内容的初始化函数调用?
发布于 2016-10-02 17:21:24
我建议使用QQmlEngine而不是QJSEngine。
Is是从QJSEngine派生出来的,所以它可以在相同的模块中做同样的事情,所以没有额外的依赖。
它提供了一种在QML中注册实例化类型的简单方法,具有插件加载机制(导入)等。
我将其作为我在Qt世界峰会2015上演讲的一部分:https://www.youtube.com/watch?v=7LsKoVrb8C8
https://stackoverflow.com/questions/39809232
复制相似问题