将qobject的元对象注册到qjsengine

w8f9ii69  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(210)

我想继承 QObject 类,并将继承类的元对象注册到qjsengine示例,以便调用 let instance = new TrialObject(); 在javascript中。这是我的密码:

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 作为 TialObject ,javascript运行正常,并返回 QObject 回到python。因此 QObject 是可调用和工作的。但当我尝试替换 QObject.staticMetaObjectAttributeHandler.staticMetaObject ,我得到错误: TypeError: AttributeHandler has no invokable constructor ... 显示attributehandler不可调用。“invokable”是指javascript可以创建类的新示例 TrialObject ,我希望它是一个用python创建的类,并继承 QObject .
如何注册继承的 QObject 的元对象 QJSEngine 这样它是可调用的,即一个新示例可以在javascript中示例化?
(pyqt6、python 3.9、windows 10)

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题