重新实现QWidget中的受保护虚函数closeEvent()
1.首先以创建一个MainWindow项目,通过main函数里的默认代码支持事件循环。
int main(int argc, char *argv[])
{
QApplication a(argc, argv); //创建应用程序对象
MainWindow w;
w.show();
return a.exec(); //启动事件循环机制
}
2.在头文件中重写继承于QWidget中的受保护虚函数closeEvent()。
class MainWindow : public QMainWindow //QMainWindow 也是继承于QWidget的
{
Q_OBJECT
public:
MainWindow(QWidget* parent = nullptr);
~MainWindow();
protected:
void closeEvent(QCloseEvent* event); //重实现QWidget中受保护的事件处理虚函数closeEvent
private:
Ui::MainWindow* ui;
};
3.在类的实现函数中重写closeEvent()。
/*
* 注意区别:closeEvent()函数是继承于QWidget的事件处理函数
* 参数中QCloseEvent是关闭事件类,event是此类的指针
*/
void MainWindow::closeEvent(QCloseEvent* event)
{
//弹出一个信息框,用户选择yes或no, 返回值是int常量
int ret = QMessageBox::question(this, "提问", "确定关闭窗口吗?");
if (ret == QMessageBox::Yes) {
event->accept(); //如果用户Yes就接受关闭事件
} else {
event->ignore(); //否则拒绝关闭
}
}
4.运行,选No拒绝关闭事件,选Yes接受关闭事件。