Qt - Esc不应该关闭对话框

时间:2010-06-27 11:40:12

标签: c++ qt dialog escaping

如何使 Esc 键最小化对话框?默认情况下它会关闭。我应该处理KeyEvent还是有更好的方式?

5 个答案:

答案 0 :(得分:16)

我想你可以用这个:

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

另请查看Events and Event Filters文档。

答案 1 :(得分:15)

逃脱呼叫拒绝()。我重写了这个函数(在我的情况下,不是为了最小化对话框而是提示保存)

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

铝_

答案 2 :(得分:3)

重命名拒绝是正确的。但要小心,因为如果要以其他方式关闭对话框,则无法调用close。

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

答案 3 :(得分:1)

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

  

退出密钥

     

如果用户按下了Esc键   对话框,QDialog :: reject()将是   调用。这将导致窗口   关闭:关闭事件不可能   忽略。

答案 4 :(得分:0)

有趣的 Qt 文档状态 ESC 调用拒绝()

<块引用>

退出键

如果用户在对话框中按下 Esc 键,QDialog::r​​eject() 将是 叫。这将导致窗口关闭:关闭事件不能 忽略

然而 QDialog::r​​eject() 文档说隐藏。即 closeEvent() 被调用,我已经确认是这种情况。

<块引用>

void QDialog::r​​eject() 隐藏模态对话框并将结果代码设置为 Rejected