2010-06-27 45 views

Trả lời

12

Tôi nghĩ rằng bạn có thể sử dụng này:

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

Cũng có một cái nhìn tại Events and Event Filters tài liệu.

+0

Bạn có thể muốn đối diện với mọi thứ trong câu lệnh if-else. – Narek

+0

Hm, tôi nghĩ rằng đó là chính xác: NẾU (không Excape) {/ * bỏ qua * /} ELSE {/ * hide * /} – mosg

+0

Vui lòng thay đổi mã của bạn thành những điều sau đây để tôi có thể chấp nhận câu trả lời của bạn. Cảm ơn! void MyDialog :: keyPressEvent (QKeyEvent * e) {if (e-> key()! = Qt :: Key_Escape) QDialog :: keyPressEvent (e); else/* minim * /} – Narek

1

Tôi nghĩ rằng để làm điều này, về cơ bản bạn phải tránh kế thừa từ QDialog. The documentation for QDialog nói:

thoát chính

Nếu người dùng nhấn phím Esc trong một hộp thoại , QDialog :: chối() sẽ được gọi là . Điều này sẽ làm cho cửa sổ thành đóng: Sự kiện đóng không thể được bỏ qua.

+0

tài liệu hay Tyler! tại sao không ghi đè thay vì tránh kế thừa? – n611x007

14

Từ chối cuộc gọi thoát(). Tôi ghi đè lên chức năng này (trong trường hợp của tôi không để giảm thiểu thoại nhưng để nhắc để lưu)

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

Al_

3

Đổi tên từ chối là đúng. Nhưng hãy cẩn thận vì nếu bạn muốn đóng hộp thoại theo cách khác, bạn không thể gọi gần.

MyDialog::reject(){ 
    if(some_closing_condition) 
    { 
     QDialog::reject() //calls the default close. 
    } 
    else 
    { 
     //skip reject operation 
    } 
} 
Các vấn đề liên quan