2010-06-27 11 views

risposta

12

penso che è possibile utilizzare questo:

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

hanno anche uno sguardo al Events and Event Filters docs.

+0

Potresti voler dire esattamente le cose opposte nell'istruzione if-else. – Narek

+0

Hm, penso che sia corretto: IF (non Excape) {/ * ignore * /} ELSE {/ * hide * /} – mosg

+0

Per favore, puoi cambiare la tua password come segue. Grazie! void MyDialog :: keyPressEvent (QKeyEvent * e) {if (e-> key()! = Qt :: Key_Escape) QDialog :: keyPressEvent (e); else/* minimizza * /} – Narek

1

penso che per fare questo, si sarebbe in sostanza dovrà evitare che eredita da QDialog. The documentation for QDialog dice:

fuga chiave

Se l'utente preme il tasto Esc in una finestra di , QDialog :: rifiutare() sarà chiamato . Ciò causerà la chiusura della finestra a : l'evento di chiusura non può essere ignorato.

+0

belle docs Tyler! perché non scavalcare invece di evitare di ereditare? – n611x007

14

Le chiamate di emergenza rifiutano(). Sovrascrivo questa funzione (nel mio caso, non per ridurre al minimo la finestra di dialogo, ma per chiedere di salvare)

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

Al_

3

Rinominare lo scarto è corretto. Ma fai attenzione perché se vuoi chiudere la finestra di dialogo in un altro modo non puoi chiamare chiudi.

MyDialog::reject(){ 
    if(some_closing_condition) 
    { 
     QDialog::reject() //calls the default close. 
    } 
    else 
    { 
     //skip reject operation 
    } 
} 
Problemi correlati