如何解决将继承的 QObject 的元对象注册到 QJSEngine
我想继承QObject
类,并将继承类的元对象注册到一个qjsengine实例中,这样我就可以在JavaScript中调用let instance = new TrialObject();
。这是我的代码:
from PyQt6.QtQml import qjsengine
from PyQt6.QtCore import QCoreApplication,QObject
JS = """
(function() {
let a = new TrialObject();
return a;
})();
"""
class AttributeHandler(QObject):
def __init__(self,parent=None):
QObject.__init__(self,parent)
class Main:
def __init__(self):
self.jsHandler = qjsengine()
self.jsHandler.globalObject().setProperty("TrialObject",self.jsHandler.newQMetaObject(QObject.staticMetaObject))
r = self.jsHandler.evaluate(JS)
print(r.toString())
if __name__ == "__main__":
app = QCoreApplication([])
main = Main()
app.exec()
当(如上所述)我使用 QObject.staticMetaObject
作为 TrialObject
时,JavaScript 运行良好,并将 QObject
返回给 Python。因此 QObject
是可调用且有效的。但是当我尝试用 QObject.staticMetaObject
替换 AttributeHandler.staticMetaObject
时,出现错误:
TypeError: AttributeHandler has no invokable constructor
... 显示 AttributeHandler 不可调用。 “可调用”是指 JavaScript 可以创建类 TrialObject
的新实例,我希望它是一个用 Python 创建并继承 QObject
的类。
如何将继承的 QObject
的元对象注册到 qjsengine
使其可调用 IE 可以在 JavaScript 中实例化新实例?
(PyQt6,Python 3.9,Windows 10)
编辑 1
运行AttributeHandler.staticMetaObject.constructorCount()
返回0
,而对于普通的QObject
,它返回2
,所以我认为问题在于构造函数实际上被识别元对象系统。 Q_INVOKABLE
在 PyQt
中不存在,所以我尝试用 __init__
装饰 pyqtSlot()
,但这也没有预期的效果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。