我有一节课。我想创建一个Logger类,我可以公开给QML供QML使用。既然我想使用的所有方法都来自LogMixIn,那么有没有一种方法来修饰继承的方法,而不是像我在下面的示例中那样重新定义它们?你知道吗
我的日志_自由基
class LogMixIn():
def logDebug(self, msg):
# Log msg at Debug Severity
质量标准_记录器.py
from PyQt5.QtCore import QObject, pyqtSlot
from my_logging_lib import LogMixIn
class QmlLogger(QObject, LogMixIn):
@pyqtSlot(str)
def logDebug(self, msg):
super().logDebug(msg)
注1:LogMixIn在很大一部分非UI代码中使用,因此希望保持它的不可知性。你知道吗
在PyQt5中,
pyqtSlot
可以修饰不从QObject
继承的类的方法,例如普通的Python mixin类。您可以通过检查继承此类mixin的子类的meta-object来轻松检查这一点:输出:
如您所见,插槽的定义方式没有区别。这是因为在建立实际连接之前,PyQt不需要检查包含类的类型。如果此时发现接收器是
QObject
,PyQt可以创建一个内部代理QObject
,其中包含Qt可以使用的插槽。对于QML,唯一重要的是方法可以通过元对象系统访问,这样就可以通过invokeMethod调用它们。你知道吗注意
pyqtSignal
和pyqtProperty
也可以在mixin中使用。但是,这种行为只在PyQt5中引入,因此在PyQt4中根本不起作用。不过,我相信在PySide的所有版本中都会发现类似的行为。你知道吗更新:
如果不能直接装饰mixin,则可以在子类定义中创建插槽,如下所示:
相关问题 更多 >
编程相关推荐