Làm cách nào để thực hiện các phím Esc để thu nhỏ hộp thoại? Theo mặc định nó đóng. Tôi có nên xử lý KeyEvent
hoặc có cách nào tốt hơn không?Qt - Esc không được đóng hộp thoại
Trả lời
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.
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.
tài liệu hay Tyler! tại sao không ghi đè thay vì tránh kế thừa? – n611x007
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_
Đổ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
}
}
Bạn có thể muốn đối diện với mọi thứ trong câu lệnh if-else. – Narek
Hm, tôi nghĩ rằng đó là chính xác: NẾU (không Excape) {/ * bỏ qua * /} ELSE {/ * hide * /} – mosg
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