您的位置:首页 > 房产 > 家装 > MFC与QT中禁用Esc、Alt+F4、关闭图标

MFC与QT中禁用Esc、Alt+F4、关闭图标

2024/10/7 0:21:45 来源:https://blog.csdn.net/xd6905/article/details/140656059  浏览:    关键词:MFC与QT中禁用Esc、Alt+F4、关闭图标

在业务中,我们需要按指定的方式才能关闭当前对话框。如下图需输入密码点击确认后,界面才能关闭。

方法1:通过禁用界面的按钮以及键盘上对应关闭对话框的按键。

1.灰度化关闭按钮

        在对话框初始化部分添加将关闭按钮禁用

//MFC
CMenu *pSysMenu = GetSystemMenu(FALSE);
ASSERT(pSysMenu != NULL);
pSysMenu->EnableMenuItem(SC_CLOSE, MF_DISABLED);//QT
setWindowFlags(windowFlags() & ~Qt::WindowCloseButtonHint);

2.Esc、Alt+F4、Enter键过滤

前两种是windows下常用的关闭按键,回车键也可一并禁用,因为有的场景误触回车,可能会触发按钮点击,按钮中调用了OnOK()这样的函数也会导致页面关闭。

mfc具体实现为重载按键检测事件,qt经查询可以重写keyPressEvent、closeEvent。

//MFC
BOOL MyDLG::PreTranslateMessage(MSG* pMsg)
{if (pMsg->wParam == VK_RETURN)return TRUE;if (pMsg->wParam == VK_ESCAPE)return TRUE;if (pMsg->message == WM_SYSKEYDOWN && pMsg->wParam == VK_F4)  //屏蔽ALT+F4return TRUE;return CDialog::PreTranslateMessage(pMsg);
}
//QT
void MyDLG::keyPressEvent(QKeyEvent *event) {if (event->key() == Qt::Key_F4 &&(event->modifiers() & Qt::AltModifier)) {event->ignore(); }else if (event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter) {event->ignore();}else {QWidget::keyPressEvent(event);}
}

方法2:可对这些退出按键和行为对应的行为函数进行重写,达到防止对话框关闭行为的目的。

1.重写Close,右上角关闭按钮和Alt+F4会触发该函数

//MFC
void DLGTest::OnClose()
{// TODO:  在此添加消息处理程序代码和/或调用默认值//CDialogEx::OnClose();
}
//QT
void MyDLG::closeEvent(QCloseEvent *event)
{event->ignore();
}

2.重写Cancel,MFC中Esc键会触发该函数。而在qt中按Esc默认是点击Cancel按钮,如果你的对话框没有Cancel按钮,Esc就不会有任何操作。如果有Cancel按钮,就修改Cancel按钮按下的槽函数,将其中的reject()屏蔽。

//MFC
void DLGTest::OnCancel()
{//CDialogEx::OnCancel();
}

3.重写OK。这个一般是我们留的唯一的退出方式,根据需要选择是否屏蔽。

void DLGTest::OnOK()
{CDialogEx::OnOK();
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com