我正在开发一个Qt应用程序,并使用closeEvent
虚函数改变了关闭行为,如下:
class MainWindow(QMainWindow):
def closeEvent(self, event):
event.ignore()
self.hide()
self.trayicon.showMessage('Running', 'Running in the background.')
这个代码按预期工作。如果我删除 event.ignore()
,应用程序将按预期退出,一切正常。
我也想控制最小化事件,所以当用户单击标题栏上的最小化按钮时,我想移动窗口而不是最小化。
我不能使用 hideEvent
虚函数,因为事件仍然会被发送到窗口,所以此代码:
def hideEvent(self, event):
event.ignore()
self.move(0,0)
将窗口移动到左上角,然后最小化它。在这里,event.ignore()
没有效果,因此我尝试使用QtCore.QObject.event
这种方式:
def event(self, event):
if event.type() == QEvent.WindowStateChange:
if self.isMinimized():
event.ignore()
self.move(0,0)
return True
return False
窗口移动后又最小化了。这是怎么回事?我怎样才能完全覆盖最小化事件?
self.hide()
更改为self.move()
,移动后仍然会发生最小化。 :( - kissgyorgyself.move(0,0)
移动时,它会移动并再次最小化。我更新了我的问题,也许现在更清楚我想要什么。 - kissgyorgyQTimer
,即QtCore.QTimer.singleShot(0, self.close)
而不是self.close()
。 - user1006989