2014-11-14 4 views
5

पर हटाएं मेरे पास एक प्रश्न है जिसमें आप में से कुछ के लिए स्पष्ट उत्तर है, लेकिन मैं इसे समझ नहीं सकता।QMessageBox बंद

QMessageBox http://qt-project.org/doc/qt-5/qmessagebox.html प्रदर्शित किया जा रहा के 2 तरीके हैं, या तो आप exec() जो उपयोगकर्ता जब तक प्रोग्राम निष्पादन रोक संदेश बॉक्स बंद करें, या show() जो सिर्फ बॉक्स (शायद अलग थ्रेड में या किसी तरह से जारी रखने के लिए कार्यक्रम की अनुमति देता है कि में प्रदर्शित करना जबकि बॉक्स उपयोगकर्ता के लिए इंतजार कर रहा है)।

मैं शो() का उपयोग करने के बाद बॉक्स को कैसे हटा सकता हूं?

इस कोड को तुरंत इसे बंद, संदेश बॉक्स nanosecond के लिए प्रकट होता है और उसके बाद यह चला गया:

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 
करता है

तो मैं कुछ जटिल तरीके से इसे हटाने के बिना, ठीक से शो() का उपयोग कैसे कर सकता हूं? क्या deleteOnClose() फ़ंक्शन जैसा कुछ ऐसा है जो उपयोगकर्ता इसे बंद करने के बाद ही इसे हटाने के लिए कहता है?

उत्तर

9

आप Qt::WA_DeleteOnClose ध्वज का उपयोग कर सकते

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

हाँ, वहाँ एक क्यूटी में अवधारणा 'पास पर नष्ट', ताकि आप अपने संदेश बॉक्स कॉन्फ़िगर इस तरह के व्यवहार का पालन करने के कर सकते हैं:

mb->setAttribute(Qt::WA_DeleteOnClose); 
0
आप

निम्नलिखित का उपयोग कर सकते हैं:

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

जिस तरह से यह बंद हो जाता है तो यह नष्ट हो जाएगा डी जब घटना लूप के पास कुछ और करने के लिए नहीं है।

संबंधित मुद्दे