// main.cpp
#include <QApplication>
#include "mainwindow.h"
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
MainWindow* window = new MainWindow();
window->show();
return app.exec();
}
// mainwindow.cpp
#include <QTimer>
#include <QMessageBox>
#include <iostream>
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
this->setCentralWidget(new QWidget());
}
void MainWindow::mousePressEvent(QMouseEvent* event)
{
this->hide();
QTimer* timer = new QTimer();
timer->setInterval(3*1000);
timer->start();
connect(timer, SIGNAL(timeout()), this, SLOT(showMessageBox()));
}
void MainWindow::showMessageBox()
{
QMessageBox::information(this, "Hello,", "world!", QMessageBox::Ok);
}
MainWindow::~MainWindow()
{
std::cerr << "Destructor called" << std::endl;
}
Я нажимаю на окно - оно скрывается и появляется QMessageBox. Я нажимаю «ОК» - приложение закрывается, и деструктор MainWindow не вызывается. Почему приложение закрывается? Может я что то пропустил? Qt 4.7.0, Linux.
... Упс! Похоже, я нашел то, что мне нужно.
a.setQuitOnLastWindowClosed(false);
Когда мне это нужно, я завершаю приложение, используя a.exit (0). Но я все еще не понимаю, что случилось.
Да! Похоже, я понимаю, что было не так. Это информация о методе
QApplication::quitOnLastWindowClosed(bool)
:
Это свойство определяет, будет ли приложение неявно закрываться при закрытии последнего окна.
По умолчанию это правда. Если это свойство имеет значение true, приложения завершают работу , когда закрывается последнее видимое основное окно (т.е. окно без родительского элемента) с набором атрибутов Qt :: WA_QuitOnClose , По умолчанию этот атрибут установлен для всех виджетов, кроме вложенных окон. Обратитесь к Qt :: WindowType для подробного списка объектов Qt :: Window.
После того, как QMainWindow скрыто, видимых окон нет. Когда QMessageBox закрывается, приложение закрывается .