2010-06-27 69 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 2010-06-27 16:30:06

+0

嗯,我认为这是正确的:如果(不是退出){/ *忽略* /} ELSE {/ * hide * /} – mosg 2010-06-28 05:43:02

+0

请将您的代码更改为以下内容,以便我可以接受您的答案。谢谢! void MyDialog :: keyPressEvent(QKeyEvent * e){if(e-> key()!= Qt :: Key_Escape)QDialog :: keyPressEvent(e);其他/ *最小化* /} – Narek 2010-07-04 05:02:22

1

我认为要做到这一点,你基本上必须避免从QDialog继承。 The documentation for QDialog说:

Escape键

如果用户在 对话框中按下Esc键,QDialog的::拒绝()将被称为 。这将导致窗口关闭 :关闭事件不能被 忽略。

+0

不错的文档泰勒!为什么不重写,而不是避免继承? – n611x007 2017-01-25 00:55:11

14

Escape calls 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 
    } 
}