我在OSX上用Qt / c ++编写了一个应用程序。退出应用程序时,我正在捕捉closeevent以显示对话框
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();
}
}
}
使用红叉或使用菜单"退出"关闭时,对话框会正确显示。
但是当我通过右键单击停靠栏中的图标关闭应用程序时,对话框会出现两次,关闭事件被调用两次。
知道为什么吗?
答案 0 :(得分:2)
是的,我认为这对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();
}
}
}
默认情况下,布尔变量m _ closing
当然应该由false
初始化。这样第二次什么都不做(处理将被跳过)。这对我有用。
答案 1 :(得分:2)
看起来这是一个QT错误: 请参阅:https://bugreports.qt.io/browse/QTBUG-43344
使用qt-5.6_4时,也遇到此问题,
在我的情况下,它发生在使用CMD + Q时,但在使用红色x按钮时没有发生。
使用类似的补丁 我避免接受或忽略,因为这是一个错误,我认为我们不应该“与它交谈”:-)
相反,我只是在被召唤一次时返回。
static int numCalled = 0;
if (numCalled++ >= 1)
return;