簡體   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