2010-06-27 13 views

Antwort

12

Ich glaube, Sie diese verwenden:

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

auch einen Blick auf Events and Event Filters docs haben.

+0

Sie möchten vielleicht direkt gegenüber Dinge in If-else-Anweisung. – Narek

+0

Hm, ich denke, dass es korrekt ist: IF (nicht Excape) {/ * ignorieren * /} ELSE {/ * hide * /} – mosg

+0

Bitte ändern Sie Ihren Code in den folgenden, denn ich könnte Ihre Antwort akzeptieren. Vielen Dank! void MyDialog :: keyPressEvent (QKeyEvent * e) {if (e-> Schlüssel()! = Qt :: Key_Escape) QDialog :: keyPressEvent (e); else/* minimieren * /} – Narek

1

Ich denke, dass, um dies zu tun, Sie im Grunde vermeiden müssen, von QDialog erben. The documentation for QDialog sagt:

Escape-Taste

Wenn der Benutzer die Esc-Taste in einem Dialog drückt, QDialog :: ablehnen() wird aufgerufen werden. Dadurch wird das Fenster auf geschlossen: Das Schließen-Ereignis kann nicht ignoriert werden.

+0

nice docs Tyler! Warum nicht überschreiben, anstatt zu erben, obwohl? – n611x007

14

Escape-Anrufe ablehnen(). Ich überschreiben diese Funktion (in meinem Fall nicht um den Dialog zu minimieren, sondern aufzufordern, zu speichern)

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

AL_

3

Umbenennung der Spuck korrekt ist. Aber seien Sie vorsichtig, denn wenn Sie den Dialog auf andere Weise schließen möchten, können Sie nicht schließen.

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