繁体   English   中英

QMessageBox在关闭时删除

[英]QMessageBox delete on close

我有一个问题对你们中的一些人有明显的答案,但我无法弄清楚。

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

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

此代码立即关闭它,消息框出现纳秒,然后它消失了:

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

这段代码也是这样

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

此代码也是如此

QMessageBox *mb = new QMessageBox(parent);
mb->setWindowTitle(title);
mb->setText(text);
mb->show();
mb->deleteLater(); // surprisingly this doesn't help either

那么如何正确使用show(),而不必以某种复杂的方式处理它的删除? 是否有类似deleteOnClose()函数的东西只会告诉它一旦用户关闭它就会自行删除?

您可以使用Qt::WA_DeleteOnClose标志

QMessageBox *mb = new QMessageBox(parent);
mb->setAttribute(Qt::WA_DeleteOnClose, true);
mb->setWindowTitle(title);
mb->setText(text);
mb->show();

是的,Qt中有一个“关闭时删除”概念,因此您可以配置消息框以遵循此类行为:

mb->setAttribute(Qt::WA_DeleteOnClose);

你可以使用以下内容:

QMessageBox* msg = new QMessageBox;
msg->setWindowTitle(title);
msg->setText(text);
connect(msg, SIGNAL(done(int)), msg, SLOT(deleteLater()));
msg->show();

这样它会在它关闭时以及当事件循环没有别的事情时会被破坏。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM