首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关闭时QMessageBox删除

关闭时QMessageBox删除
EN

Stack Overflow用户
提问于 2014-11-14 08:15:18
回答 3查看 3.9K关注 0票数 5

我有一个问题对你们中的一些人有明显的答案,但我就是搞不懂。

QMessageBox http://qt-project.org/doc/qt-5/qmessagebox.html有两种显示方式,一种是执行exec(),在用户关闭消息框之前停止程序执行,另一种是通过show()只显示该框(可能是在单独的线程中,或者以某种方式允许程序在等待用户时继续运行)。

如何在使用show()之后删除该框?

该代码立即关闭它,消息框将显示为纳秒,然后它就消失了:

代码语言:javascript
复制
QMessageBox *mb = new QMessageBox(parent);
mb->setWindowTitle(title);
mb->setText(text);
mb->show();
delete mb; // obvious, we delete the mb while it was still waiting for user, no wonder it's gone

此代码也会执行相同的操作

代码语言:javascript
复制
QMessageBox mb(parent);
mb.setWindowTitle(title);
mb.setText(text);
mb.show();
// obvious, as we exit the function mb which was allocated on stack gets deleted

同样,此代码也会执行相同的操作。

代码语言:javascript
复制
QMessageBox *mb = new QMessageBox(parent);
mb->setWindowTitle(title);
mb->setText(text);
mb->show();
mb->deleteLater(); // surprisingly this doesn't help either

那么,如何正确地使用show(),而不必以某种复杂的方式处理它的删除呢?有类似于deleteOnClose()函数的东西会告诉它在用户关闭它时删除它自己吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-14 08:21:52

您可以使用Qt::WA_DeleteOnClose标志

代码语言:javascript
复制
QMessageBox *mb = new QMessageBox(parent);
mb->setAttribute(Qt::WA_DeleteOnClose, true);
mb->setWindowTitle(title);
mb->setText(text);
mb->show();
票数 15
EN

Stack Overflow用户

发布于 2014-11-14 08:21:36

是的,Qt中有一个'delete on close‘的概念,所以您可以配置您的消息框来遵循这样的行为:

代码语言:javascript
复制
mb->setAttribute(Qt::WA_DeleteOnClose);
票数 2
EN

Stack Overflow用户

发布于 2014-11-14 09:08:20

您可以使用以下内容:

代码语言:javascript
复制
QMessageBox* msg = new QMessageBox;
msg->setWindowTitle(title);
msg->setText(text);
connect(msg, SIGNAL(done(int)), msg, SLOT(deleteLater()));
msg->show();

这样,当它被关闭时,当事件循环没有其他事情可做时,它就会破坏。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26925630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档