C++ QMessageBox关闭时删除

C++ QMessageBox关闭时删除,c++,qt,qmessagebox,C++,Qt,Qmessagebox,我有一个问题对你们中的一些人来说答案很明显,但我就是想不出来 QMessageBox有两种显示方式,一种是执行exec(),在用户关闭消息框之前停止程序执行;另一种是执行show() 使用show()后如何删除该框 此代码立即关闭,消息框出现纳秒,然后消失: QMessageBox *mb = new QMessageBox(parent); mb->setWindowTitle(title); mb->setText(text); mb->show(); delete mb;

我有一个问题对你们中的一些人来说答案很明显,但我就是想不出来

QMessageBox有两种显示方式,一种是执行
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
这段代码也有同样的功能

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中有一个“关闭时删除”的概念,因此您可以配置消息框以遵循以下行为:

mb->setAttribute(Qt::WA_DeleteOnClose);

您可以使用
Qt::WA_DeleteOnClose
标志

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

您可以使用以下选项:

QMessageBox* msg = new QMessageBox;
msg->setWindowTitle(title);
msg->setText(text);
connect(msg, SIGNAL(done(int)), msg, SLOT(deleteLater()));
msg->show();
这样,当它关闭并且事件循环无事可做时,它就会破坏