当用户点击典型的关闭按钮时,我一直试图隐藏一个独立的对话框应用程序(角落中的X通常位于最小化按钮旁边)我在这篇文章中提到:
Qt: How do I handle the event of the user pressing the 'X' (close) button?
我认为会有我的解决方案,但是当我实现它时会出现奇怪的行为。
void MyDialog::reject()
{
this->hide()
}
当我点击X按钮时,整个应用程序关闭(进程消失),这不是我想要的。由于我的gui使用命令行生成,我设置了一个测试系统,我可以通过文本命令告诉我的对话框,我调用相同的'this-> hide()'指令,一切正常。该对话框会隐藏,然后在我告诉它显示时显示回来。
任何想法为什么拒绝方法完全关闭我的应用程序,即使我没有明确告诉它?
答案 0 :(得分:0)
在对话框类中重写虚函数“virtual void closeEvent(QCloseEvent * e)”。代码注释将详细解释。
Dialog::Dialog(QWidget *parent) :QDialog(parent), ui(new Ui::Dialog){
ui->setupUi(this);
}
Dialog::~Dialog(){
delete ui;
}
//SLOT
void Dialog::fnShow(){
//Show the dialog
this->show();
}
void Dialog::closeEvent(QCloseEvent *e){
QMessageBox::StandardButton resBtn = QMessageBox::question( this, "APP_NAME",
tr("Are you sure?\n"),
QMessageBox::Cancel | QMessageBox::No | QMessageBox::Yes,
QMessageBox::Yes);
if (resBtn != QMessageBox::Yes){
//Hiding the dialog when the close button clicked
this->hide();
//event ignored
e->ignore();
//Testing. To show the dialog again after 2 seconds
QTimer *qtimer = new QTimer(this);
qtimer->singleShot(2000,this,SLOT(fnShow()));
qtimer->deleteLater();
}
//below code is for understanding
//as by default it is e->accept();
else{
//close forever
e->accept();
}
}