【发布时间】:2020-09-29 03:09:37
【问题描述】:
我想将来自我的自定义 QWidget 类 (WidgetClass) 的信号连接到 DerivedController 的插槽。 我在实例化两个类后尝试连接信号。
但是,我在 connect() 语句中收到以下错误:
QObject::connect: Cannot connect WidgetClass::mySignal(double) to (nullptr)::mySlot(double)
我不太清楚为什么会这样。如果我理解正确,您只能将信号连接到类实例之间的插槽。 下面是我正在编写的伪实现(它在 ipython 中产生相同的错误):
from PyQt5.QtCore import pyqtSlot, pyqtSignal, QObject
from PyQt5.QtWidgets import QApplication, QWidget
class BaseController():
def __init__(self, widget1, widget2):
self.widget1 = widget1
self.widget2 = widget2
#@pyqtSlot(float)
def mySlot(self, value):
print(f"BaseClass got {value}.")
class DerivedController(BaseController):
def __init__(self, widget1, widget2):
super().__init__(widget1, widget2)
@pyqtSlot(float)
def mySlot(self, value):
#super().mySlot(value)
print(f"Derived class got {value}!")
def _setupConnections(self):
self.widget1.mySignal.connect(
self.mySlot)
self.widget2.mySignal.connect(
self.mySlot)
class WidgetClass(QWidget):
mySignal = pyqtSignal(float)
def emitSignal(self):
self.mySignal.emit(1.8)
def myfunc():
w1 = WidgetClass()
w2 = WidgetClass()
controller = DerivedController(w1, w2)
controller._setupConnections()
controller.widget1.emitSignal()
def main():
app = QApplication(["test"])
return app.exec(myfunc())
if __name__ == "__main__":
main()
【问题讨论】: