Ctrl+Escape
是打开主系统菜单的全局窗口快捷方式。但是我希望我的Qt应用程序在不触发Windows主菜单的情况下使用这个快捷方式。我知道在一般情况下重写系统快捷键可能是个坏主意,但是我想使用这个快捷方式是一个非常有限的用例。
这个用法如下所示。我有一个弹出窗口,其中包含几行或几项。此窗口由Ctrl+Tab
打开,当用户持有Ctrl
并继续按Tab
时,当前行将被循环通过。当用户释放Ctrl
时,当前行用于某些操作.但有时用户按Ctrl+Tab
,然后意识到他不想继续。他通常一边按住Escape
,一边握着Ctrl
。然后触发Windows系统菜单,普通用户感到困惑,胆大妄为的用户生气。这是件坏事。换句话说,当用户按Ctrl+Escape
时,我希望能够关闭弹出窗口。怎么做?甚至有可能吗?
如果我使用此快捷方式编写代码,就像使用任何其他快捷方式一样,它不起作用,并且总是触发Windows主菜单。
发布于 2019-09-01 19:50:16
据我所知,如果基础窗口系统拦截了Qt,那么Qt通常不会接收关键事件。例如,即使是QtCreator也不能覆盖整个系统的快捷方式。
这个问题几乎是:C++/Qt全局热键的重复。
虽然这个问题是专门要求在隐藏/背景应用程序中捕获快捷方式,但我认为基本概念是相同的--在窗口系统处理之前捕获快捷键。
从这个答案来看,UGlobalHotkey似乎相当不错,如何在Qt应用程序中使用系统范围的热键博客文章可能对您的有限用例有用(但请阅读博客文章中关于修复示例的评论)。
还发现:
https://stackoverflow.com/questions/57745399
复制相似问题