应用程序中只有唯一一个QDialog,如果点击它上面的关闭按钮,或者调用了reject(),accept()方法,那么QApplication的事件循环就会结束,让整个应用程序退出。
但是有时候,例如一个程序,没有界面,只有右下角的任务栏上有一个图标,右击图标弹出菜单,可以进行设置。如设置参数时,会创建一个QDialog窗口,设置完成后,这个窗口被关闭,这时整个程序就会退出了。为了解决这一问题。可以重写closeEvent()函数,如下:
void SetupDialog::closeEvent(QCloseEvent *e) {
e->ignore();
reject();
}
这样,如果有确定按钮或者取消按钮时,他们相对应的slot中调用close()方法去关闭窗口,至于在closeEvent函数中使用reject()还是accpet()函数,使用自己设定的一个标志来判断就可以了,关键在于()e->ignore()这个函数的调用。