我在 OSX 上用 Qt/c++ 编写了一个应用程序。退出应用程序时,我正在捕获关闭事件以显示对话框
void MainUI::closeEvent (QCloseEvent *event)
{
if( DeviceUnplugged == false) {
ExitDialog = new DialogExit;
ExitDialog->exec();
if(ExitDialog->result() == QDialog::Accepted) {
m_device.CloseDevice();
event->accept();
}
else {
event->ignore();
}
}
}
当使用红叉或使用菜单“退出”关闭时,对话框正确显示。
但是当我使用右键单击停靠栏中的图标关闭应用程序时,对话框出现两次,关闭事件被调用两次。
知道为什么吗?
最佳答案
是的,我认为这对 Mac 来说是正常的,至少我的 Qt 应用程序中也有这个(仅在 Mac 上)。
我使用了以下解决方法:
void MainUI::closeEvent (QCloseEvent *event)
{
if (m_closing)
{
event->accept();
return;
}
if( DeviceUnplugged == false) {
ExitDialog = new DialogExit;
ExitDialog->exec();
if(ExitDialog->result() == QDialog::Accepted) {
m_device.CloseDevice();
m_closing = true;
event->accept();
}
else {
event->ignore();
}
}
}
默认情况下, bool 变量 m_closing
应该在您的类中初始化为 false
。这样第二次什么也不会做(处理将被跳过)。这对我有用。
关于c++ - 退出应用程序调用两次关闭事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30068710/