Здравствуйте! Столкнулся со следующей проблемой:
Имеется главное окно QMainWindow, которое может сворачиваться в трей при минимизации. У окна установлен атрибут Qt::WA_DeleteOnClose.
Определён слот для закрытия приложения:
void AppExit()
{
qApp->closeAllWindows();
qApp->quit();
}
Если вызвать этот слот при развёрнутом окне - нормально вызывается деструктор главного окна и приложение завершается. Если окно свернуть в трей и из контекстного меню трея вызвать этот слот - приложение завершится, но деструктор окна не вызовется, т.к. окно не получает CloseEvent.
Посмотрел в асистанте:
bool QWidget::close () [slot]
First it sends the widget a QCloseEvent. The widget is hidden if it accepts the close event.
...
A close events is delivered to the widget no matter if the widget is visible or not.
...
void QWidget::hide () [slot]
Hides the widget. This function is equivalent to setVisible(false).
Получается, если окно уже hidden, то оно не получает CloseEvent? Но это противоречит указанному в документации по close.
Есть какое-то правильное решение, помимо вызова showNormal() перед qApp->closeAllWindows();
?