2014-02-27 34 views
1

我想要在用户注销或关闭应用程序时处理,但由于我的应用程序在MainWindow关闭时将其最小化到托盘,我遇到了麻烦。当我注销时,会调用closeEvent,但我无法确定它是否来自尝试退出的操作系统或按下'x'(关闭)按钮的用户。如何处理来自closeEvent的PyQt4的检测注销/关闭?

只有当它是操作系统,我想关闭我的连接,并实际终止应用程序。不幸的是,closeEvent在任何其他函数之前被调用。在下面的示例中,仅当您注释掉event.ignore()时,才会调用commitDataaboutToQuit

任何帮助,将不胜感激:)

http://pyqt.sourceforge.net/Docs/PyQt4/qapplication.html#commitData

http://pyqt.sourceforge.net/Docs/PyQt4/qcoreapplication.html#aboutToQuit

http://qt-project.org/doc/qt-4.8/qapplication.html#details

import sys 
from PyQt4 import QtGui 


class myWidget(QtGui.QWidget): 
    def closeEvent(self, event): 
     print "CLOSING" 
     event.ignore() 


class myApp(QtGui.QApplication): 
    def __init__(self, argv): 
     QtGui.QApplication.__init__(self, argv) 
     print "CREATED" 

    def commitData(self, session_manager): 
     print "COMMITTING" 


def cd(session_manager): 
    print "ALSO CMOMMITTING" 


def about_to_quit(): 
    print "QUITTING" 


def main(): 
    app = myApp(sys.argv) 
    app.aboutToQuit.connect(about_to_quit) 
    w = myWidget() 
    w.resize(250, 150) 
    w.setWindowTitle('Simple') 
    w.show() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 

回答