2010-02-10 7 views
8

मैं एक क्यूटी सिम्बियन प्रोजेक्ट का निर्माण कर रहा हूं और मैं उस उपयोगकर्ता के लिए एक सूचना दिखाना चाहता हूं जिसे कुछ सेकंड के बाद ऑटो बंद करना चाहिए। मैंने देखा है कि नोकिया अपने यूई में बहुत कुछ उपयोग करता है।ऑटो बंद QMessageBox

अभी मैं नीचे दिए गए कोड का उपयोग कर रहा हूं ताकि उपयोगकर्ता QMessageBox को बंद कर सके लेकिन मुझे यह अच्छा लगेगा कि 1 या 2 सेकंड के बाद QMessageBox को स्वतः बंद करना संभव हो। क्यूटी का उपयोग करके मैं यह कैसे कर सकता हूं?

QMessageBox msgBox; 
msgBox.setText("Hello!"); 
msgBox.setIcon(QMessageBox::Information); 
msgBox.setStandardButtons(QMessageBox::Ok); 
msgBox.exec(); 

उत्तर

4

मैं QMessageBox उपवर्ग के लिए अपने स्वयं के वांछित व्यवहार को जोड़ने के लिए सुझाव है कि ...

यह setAutoClose(bool) और setAutoCloseTimeout(int) तरह विधियां जोड़ें और showEvent पर एक QTimer को गति प्रदान जब स्वतः विकल्प सक्षम है के लिए दिलचस्प होगा!

इस तरह, आप भी अपने QMessageBox की apparence में परिवर्तन और एक पाठ कह "यह बॉक्स XXX सेकंड में अपने आप बंद हो जाएगा ..." या एक प्रगति बार, आदि के लिए किया था सकता है ...

5

धन्यवाद वास्तव में बहुत ! मेरे समाधान:

class MessageBox : public QMessageBox 

int timeout; 
bool autoClose; 
int currentTime; 

void MessageBox::showEvent (QShowEvent * event) { 
    currentTime = 0; 
    if (autoClose) { 
    this->startTimer(1000); 
    } 
} 

void MessageBox::timerEvent(QTimerEvent *event) 
{ 
    currentTime++; 
    if (currentTime>=timeout) { 
    this->done(0); 
    } 
} 
+0

startTimer की आपकी परिभाषा कहां है? – qed

+3

आप 'msgBox.setStandardButtons (QMessageBox :: ठीक) जोड़कर QAbstractPushButton.animateClick विधि का भी उपयोग कर सकते हैं; msgBox.button (QMessageBox :: ठीक है) .animateClick (timeout) ' –

1

इसके बजाय आप Singleshot टाइमर का उपयोग कर सकते बंद करने के लिए:

MessageBox msgBox; 
msgBox.setText("Hello!"); 
msgBox.setIcon(QMessageBox::Information); 
msgBox.setStandardButtons(QMessageBox::Ok); 
msgBox.setAutoClose(true); 
msgBox.setTimeout(3); //Closes after three seconds 
msgBox.exec(); 

यह मेरी कक्षा है:

मैं अपने ही वर्ग (MessageBox) बनाया यह यह दिखाने के लिए मेरी कोड है किसी भी संवाद बॉक्स या QLabel बहुत आसानी से:

QTimer *timer; 
QTimer::singleShot(10000, msgBox, SLOT(close())); 
0

इस कोड के साथ:

QTimer *timer; 
QTimer::singleShot(10000, msgBox, SLOT(close())); 

आपको मिलेगा:

QObject::connect: Incompatible sender/receiver arguments 
     QTimer::timeout() --> QMessageBox:: 

क्योंकि MsgBox (रिसीवर) एक QtCore ऑब्जेक्ट होना चाहिए .. और QMessageBox उपवर्गीकरण QtGui। देखें https://srinikom.github.io/pyside-docs/PySide/QtCore/QTimer.html#PySide.QtCore.PySide.QtCore.QTimer.singleShot

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