【发布时间】:2011-07-04 05:45:49
【问题描述】:
// 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):
此属性保存当最后一个窗口关闭时应用程序是否隐式退出。 默认值为真。如果此属性为真,则当最后一个 可见 主 窗口(即没有父窗口的窗口)具有 Qt::WA_QuitOnClose 属性时,应用程序退出集已关闭。默认情况下,为除子窗口之外的所有小部件设置此属性。关于 Qt::Window 对象的详细列表,请参阅 Qt::WindowType。
QMainWindow 隐藏后,没有可见窗口。当 QMessageBox 关闭时,应用程序退出。
【问题讨论】:
标签: c++ qt qt4 qmainwindow qmessagebox