2013-07-12 47 views
1

在Mac上,当您点击小部件的红色“关闭”按钮时,您的QWidget将收到“closeEvent”调用。Qt:致电closeEvent的原因(...)

但是,如果在键盘上单击“cmd-Q”以退出应用程序,则打开的QWidget也会收到“closeEvent”。

在“closeEvent”时间,有没有办法找出它被调用的原因?因为用户关闭了特定窗口,或者因为用户只是试图彻底退出应用程序?

或者换句话说,QCoreApplication/QAppliction对象会有一些线索,有一些标志表明它处于“我即将关闭应用程序”模式,我可以在closeEvent期间检查它吗?

回答

2

http://qt-project.org/doc/qt-4.8/signalsandslots.html#advanced-signals-and-slots-usage

http://qt-project.org/doc/qt-4.8/qevent.html#spontaneous

http://qt-project.org/doc/qt-4.8/qcloseevent-members.html

如果你把void closeEvent() public slots: protected:

可以查询 closeEvent()的发件人的对象名。

qDebug() << QObject::sender()->objectName(); 

否则

可以筛选基础的QCloseEventspontaneous()件上。

qDebug() << closeEvent->spontaneous(); 

希望有所帮助。

+0

查询发件人无效,因为'closeEvent()'是一个事件,而不是一个槽;因此,'QObject :: sender()'为null,因此调用'QObject :: sender() - > objectName()'会使程序崩溃。 –

+0

我曾经把'closeEvent()'和'showEvent()'作为插入子类的对象......现在我把它们改为'protected:'来代替。 – phyatt

相关问题