对于一个QDialog类的对话框可以用reject()和accept()来控制关闭时的行为。对于QMainWindow而言则可以通过close()信号和closeEvent(QCloseEvent *)函数。当然,这两个都是从QWidget那里继承过来的,所以严格说来只要是Qt控件就都能用,但应该还是对主窗口应用比较多吧。
每当点击窗口上方的关闭按钮,就会引发窗口的bool close()响应,如果窗口被关闭返回true,否则返回false。如果没有重载,close()会调用void closeEvent(QCloseEvent *)函数,缺省关闭窗口并返回true;作为protected的成员,这个函数同样可以重载。比如
void [MainWindow Name]::closeEvent(QCloseEvent *event)
{
int r=QMessageBox:question(this,tr("Last Hint"),tr("Are you sure you want to quit?"),QMessageBox::Yes|QMessageBox::Default,QMessageBox::No|QMessageBox::Escape);
if (r==QMessageBox::Yes)
event->accept();
else
event->ignore();
}
其中accept就是让这个关闭事件通过并顺利关闭窗口,ignore就是将其忽略回到窗口本身。这里可千万得注意在每一种可能性下都对event进行处理,以免遗漏。
每当点击窗口上方的关闭按钮,就会引发窗口的bool close()响应,如果窗口被关闭返回true,否则返回false。如果没有重载,close()会调用void closeEvent(QCloseEvent *)函数,缺省关闭窗口并返回true;作为protected的成员,这个函数同样可以重载。比如
void [MainWindow Name]::closeEvent(QCloseEvent *event)
{
int r=QMessageBox:question(this,tr("Last Hint"),tr("Are you sure you want to quit?"),QMessageBox::Yes|QMessageBox::Default,QMessageBox::No|QMessageBox::Escape);
if (r==QMessageBox::Yes)
event->accept();
else
event->ignore();
}
其中accept就是让这个关闭事件通过并顺利关闭窗口,ignore就是将其忽略回到窗口本身。这里可千万得注意在每一种可能性下都对event进行处理,以免遗漏。
本文介绍了在Qt中如何处理QMainWindow的关闭事件,包括使用close()函数和重载closeEvent(QCloseEvent*)函数的方法,以及如何通过弹出对话框确认是否关闭窗口。
4546

被折叠的 条评论
为什么被折叠?



