我有一个主要功能,我在创建一个Control类的实例和一个GuiWindow类的实例。此GuiWindow对象具有接受前面提到的Control类实例作为其参数的方法。但是GuiWindow并没有将Control对象作为自己的属性!当从main函数调用时,它接收它作为自己的方法参数。所以一切正常,GuiWindow有事件监听器,按照他们的说法,他称控制和控制做任何需要做的事情......但是当用户关闭GUI窗口时,Control需要做一些非常重要的事情!
我当前的closeEvent函数的作用如下:
def closeEvent(self, event):
quit_msg = "Are you sure you want to exit the program?"
reply = QtGui.QMessageBox.question(self, 'Exit',
quit_msg, QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
if reply == QtGui.QMessageBox.Yes:
event.accept()
exit()
else:
event.ignore()
如果我想将Control类的对象传递给此closeEvent函数,该怎么办?那可能吗?我不知道如何覆盖closeEvent函数,以便它知道它需要调用一些Control方法。如果我把Control类对象作为closeEvent函数参数,它当然不起作用......
有人有什么想法吗?我应该使用某种信号和事件机制吗?
答案 0 :(得分:0)
我设法通过使用Signal和Event机制获取Control类的closeEvent函数调用方法。我创建了以下类:
class ExitApp(QtCore.QObject):
exit_app_signal = QtCore.Signal(str)
def __init__(self):
QtCore.QObject.__init__(self)
def exit_app(self, exit_message):
self.exit_app_signal.emit(exit_message)
我连接到Control类的所需方法的对象,我以下面的方式调用它:
def closeEvent(self, event):
quit_msg = "Are you sure you want to exit the program?"
reply = QtGui.QMessageBox.question(self, 'Exit',
quit_msg, QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
if reply == QtGui.QMessageBox.Yes:
self.exit_app.exit_app('Properly exit.')
event.accept()
exit()
else:
event.ignore()