Esc鍵對大家來說實在熟悉不過的了,在Qt中Esc鍵也會默認的進行一些事件的觸發,今天對Esc鍵測試了一下,突然發現不像我想象的那樣,在QDialog中按下Esc鍵會默認調用reject()方法而不是closeEvent(QCloseEvent *event)或者其他事件。所以在這里如何管理和操作Esc鍵呢?
1、重新實現reject()方法
void LoginDialog::reject()
{
//關閉窗口,不一定非得是close(),可以重新執行其他事件
this->close();
}
2、重寫keyPressEvent(QKeyEvent *event)
void LoginDialog::keyPressEvent(QKeyEvent *event)
{
switch(event->key())
{
//進行界面退出,重寫Esc鍵,否則重寫reject()方法
case Qt::Key_Escape:
this->close();
break;
default:
QDialog::keyPressEvent(event);
}
}
以上者兩種方法都可以解決Esc鍵觸發的問題!當然這只是在QDialog中是這種情況,在QWidget中也可以通過keyPressEvent(QKeyEvent *event)來制定Esc鍵的功能,但是再重寫reject()就不行了,以為它默認執行的不是reject(),具體的可以測試一下!
