问题描述
在程序中使用QCloseEvent时,有时没有反应,没有关闭程序。
原因
经测试只有在界面起来以后,使用event->accept()才能关闭程序
测试如下
在构造函数中调用close()
在构造函数中调用close()时,会触发QCloseEvent事件,但是程序界面没有关闭。
使用按钮触发
在按钮槽函数中,调用close(),可以使程序界面关闭。因为此时,界面已经启动。
使用定时器
在定时器触发的槽函数中,调用close(),同样可以,但是定时时间需要调整,最好等其他线程都结束后,在执行close(),否则程序会报异常退出。
在showEvent中
在showEvent中调用close(),界面没有完全关闭,测试demo中,只关闭了子控件。
遗留问题
能不能不在程序界面启动前关闭程序?暂时没找到方法,希望大神不吝赐教
测试代码
主代码如下
#include "MainWindow.h"
#include "ui_MainWindow.h"
#include <QDebug>
#define MyDebug qDebug()<<"[FILE:"<<__FILE__<<",LINE"<<__LINE__<<",FUNC"<<__FUNCTION__<<"]"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
MyDebug;
ui->setupUi(this);
close();
myTimerClose = new QTimer(this);
myTimerClose->singleShot(1, this, SLOT(slotTimerClose()));
}
MainWindow::~MainWindow()
{
MyDebug;
delete ui;
}
void MainWindow::closeEvent(QCloseEvent *event)
{
MyDebug;
event->accept();
//event->ignore();
}
void MainWindow::showEvent(QShowEvent *event)
{
MyDebug;
event->accept();
close();
}
void MainWindow::on_pushButton_clicked()
{
MyDebug;
close();
}
void MainWindow::slotTimerClose()
{
MyDebug;
close();
}