2010-06-27 3 views

답변

12

나는 당신이 사용할 수 있습니다 생각 :

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

는 또한 Events and Event Filters 문서를 보라.

+0

if-else 문에서 정반대로 할 수 있습니다. – Narek

+0

흠, 나는 그것이 맞는 것 같아요 : IF (Excape) {/ * ignore * /} ELSE {/ * hide * /} – mosg

+0

답변을 수락 할 수 있도록 코드를 다음과 같이 변경하십시오. 감사! void MyDialog :: keyPressEvent (QKeyEvent * e) {if (e-> key()! = Qt :: Key_Escape) QDialog :: keyPressEvent (e); else/* minimize * /} – Narek

1

이 작업을 수행하려면 기본적으로 QDialog을 상속하지 않아야합니다. The documentation for QDialog는 말한다 : 사용자가 대화 상자에서 Esc 키를 누르면

탈출 키

경우, 인 QDialog이 :: 를 호출됩니다() 거부합니다. 이로 인해 창은 으로 닫힙니다. 닫기 이벤트는 으로 무시할 수 없습니다.

+0

멋진 문서 Tyler! 상속을 피하는 대신 오버라이드하지 않는 이유는 무엇입니까? – n611x007

14

Escape는 reject()를 호출합니다. 나는 거부 이름 바꾸기

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 
    } 
} 
관련 문제