方法:
重载QWindow 或者QWidget的nativeEvent信号,并处理WM_KEYDOWN和WM_SYSKEYDOWN两个case,
如下:
bool COriginalDialog::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
if (eventType == "windows_generic_MSG" || eventType == "windows_dispatcher_MSG") {
MSG* msg = static_cast<MSG *>(message);
switch (msg->message)
{
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
{
if ((VK_F4 == msg->wParam) && (::GetKeyState(VK_MENU) & 0xF000))
{
qDebug() << "alt + f4";
return TRUE;
}
}
break;
default:
break;
}
}
return QDialog::nativeEvent(eventType, message, result);
}