close函数 qt_QT中的close、closeEvent和析构函数的理解(基础知识)

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:07   2373   0

析构函数

析构函数(destructor) 与构造函数相反,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,delete会自动调用析构函数后释放内存)。

摘自百度文库

void QWidget::closeEvent(QCloseEvent *event)

当Qt从窗口系统接收到窗口关闭请求时,将使用给定的事件调用此事件处理程序。

默认情况下,接受事件并关闭小部件。您可以重新实现此函数来更改小部件响应窗口关闭请求的方式。例如,可以通过对所有事件调用ignore()来防止窗口关闭。

主窗口应用程序通常使用此函数的重新实现来检查用户的工作是否已保存,并在关闭之前请求权限。例如,应用程序示例使用帮助函数来确定是否关闭窗口。

void MainWindow::closeEvent(QCloseEvent *event)

{

if (maybeSave()) {

writeSettings();

event->accept();

} else {

event->ignore();

}

}

** 注: 只是关闭窗口 **

bool QWidget::close()

关闭这个小部件。如果小部件关闭,则返回true;否则返回false。

首先,它向小部件发送一个QCloseEvent。如果小部件接受关闭事件,它将被隐藏。如果它忽略事件,什么也不会发生。QWidget::closeEvent()的默认实现接受关闭事件。

如果小部件有Qt::WA_DeleteOnClose标记,小部件也会被删除。不管小部件是否可见,关闭事件都会传递到小部件。

当最后一个可见主窗口(即没有父窗口的窗口)的Qt::WA_QuitOnClose属性设置关闭时,发出QApplication::lastWindowClosed()信号。默认情况下,此属性为所有窗口小部件设置,除了临时窗口,如启动屏幕、工具窗口和弹出菜单

窗口关闭时谁先调用已经很明了

代码

QWMainWindow::~QWMainWindow() {

qDebug() << "QWMainWindow::~QWMainWindow()";

delete ui;

}

void QWMainWindow::closeEvent(QCloseEvent *event) {

qDebug() << "mainWindow close event " << event->type();

}

消息打印

f4db65a02d4fe9924a0639af752d683a.png

关闭子窗口

playBack = new PlayBackForm();

在closeEvent函数中关闭playBack子窗口,

delete playBack;///>如果子窗口playBack中重载了CloseEvent,函数实现为this.hide();用这个

//playBack.close;///>未在重载函数中使用this.hide()

编码注意

如果你已经在closeevent中delete过就别再析构函数中再次delete了。

点赞

收藏

分享

文章举报

f0d4c93b1ba568493cdefa6fe27bb8b1

de638df49f1d5a3342eecff86bcb011e.png

MMTS_yang

发布了49 篇原创文章 · 获赞 1 · 访问量 2150

私信

关注

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP