2010-06-27 11 views

उत्तर

12

मुझे लगता है कि आप इसका उपयोग कर सकते:

MyDialog::keyPressEvent(QKeyEvent *e) { 
    if(e->key() != Qt::Key_Escape) 
     QDialog::keyPressEvent(e); 
    else {/* minimize */} 
} 

इसके अलावा Events and Event Filters डॉक्स पर एक नजर है।

+0

यदि आप अन्य कथन में सही विपरीत चीजें चाहते हैं। – Narek

+0

एचएम, मुझे लगता है कि यह सही है: अगर (एक्सपैक्स नहीं) {/ * अनदेखा करें * /} ईएलएसई {/ * छुपाएं * /} – mosg

+0

कृपया अपना उत्तर निम्नलिखित में बदल दें क्योंकि मैं आपका उत्तर स्वीकार कर सकता हूं। धन्यवाद! शून्य MyDialog :: keyPressEvent (QKeyEvent * e) {if (e-> key()! = Qt :: Key_Escape) QDialog :: keyPressEvent (e); अन्यथा * * कम करें * /} – Narek

1

मुझे लगता है कि ऐसा करने के लिए, आपको मूल रूप से QDialog से विरासत से बचने के लिए होगा। The documentation for QDialog का कहना है: उपयोगकर्ता एक संवाद में Esc कुंजी प्रेस

एस्केप कुंजी

हैं, तो QDialog :: अस्वीकार() बुलाया जाएगा। इससे विंडो बंद हो जाएगी: निकट घटना को अनदेखा नहीं किया जा सकता है।

+0

अच्छे दस्तावेज़ टायलर! यद्यपि विरासत से बचने के बजाय ओवरराइड क्यों नहीं? – n611x007

14

एस्केप कॉल अस्वीकार()। मैं (मेरे मामले संवाद कम करने के लिए नहीं, बल्कि सहेजने का संकेत) इस समारोह को ओवरराइड

void MyDialog::reject() {if(cleanupIsOK()) done(0);} 

Al_

3

का नाम बदल रहा अस्वीकार सही है। लेकिन सावधान रहें क्योंकि अगर आप दूसरे तरीके से संवाद बंद करना चाहते हैं तो आप करीब कॉल नहीं कर सकते हैं।

MyDialog::reject(){ 
    if(some_closing_condition) 
    { 
     QDialog::reject() //calls the default close. 
    } 
    else 
    { 
     //skip reject operation 
    } 
} 
संबंधित मुद्दे