有一段时间没有使用Qt开发,最近给公司写的小DEMO中,用到了Qt编写的界面,其中有几处用到Event处理,在编写对Esc键处理的过程中,发现closeEvent无效,最终发现了两种解决办法。

1、重新实现reject()方法,关闭对话窗体不一定必须采用closeEvent进行处理。这是因为按下Esc键默认触发的是reject方法,可以重写reject方法。如下:
void LoginDialog::reject()
{
this->close();
}

重写keyPressEvent(QKeyEvent *event),这是比较容易理解的方法,也是处理各种按键常用的方法。

void ShowDialog::keyPressEvent(QKeyEvent *event)
{
switch(event->key())
{
case Qt::Key_Escape:
this->close();
break;

    default:   
        QDialog::keyPressEvent(event);   
}   

}

值得注意的是,对于QWidget来说,重写reject是无效的,因为它默认执行的不是reject。
Qt中Esc键触发事件处理

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.