问题描述
我想继承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 (将#修改为@)