今天解决个问题,用到了QDialog,记录下以免下次遇到。
程序是一个界面Dialog-Domodal,上面有个进度条显示进度及一个“取消”键,估计下面有个线程一直在执行并传出进度信息。
问题是: 在键盘上 按“空格”、“回车”、“ESC”都会关闭窗体
空格和回车均响应取消键,而ESC会调用reject()
首先先屏蔽空格键的响应,在Event中处理,但没有效果,google一下,发现需要在eventFilter中处理:
bool CVxWaitDialog::eventFilter(QObject *obj, QEvent *event) //屏蔽掉空格键 by ym
{
if (obj == m_pBtnCancel) {
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
if(keyEvent->key() == Qt::Key_Space)
{
return true;
}
}
}
return QDialog::eventFilter(obj, event);
}
屏蔽空格成功。
而按ESC键会关闭窗体,但不会调用closeEvent(),所以需要在reject()中发送信号以关闭底下的工作线程。
当然这种情况下,最好不要用QDialog,因为它的Default Button可能会带来一些问题。