【问题标题】:overriding system-wide (Windows) key shortcuts in Qt app覆盖 Qt 应用程序中的系统范围 (Windows) 快捷键
【发布时间】:2020-01-04 19:25:43
【问题描述】:

Ctrl+Escape 是用于打开主系统菜单的全局 Windows 快捷方式。但我希望我的 Qt 应用程序在不触发 Windows 主菜单的情况下使用此快捷方式。我知道一般来说覆盖系统快捷方式可能是个坏主意,但我想使用这个快捷方式是一个非常有限的用例。

这个用例如下。我有一个包含多行或项目的弹出窗口。此窗口由Ctrl+Tab 打开,当用户按住Ctrl 并按住Tab 时,当前行将循环显示。当用户释放Ctrl时,当前行用于某些操作......但有时会发生用户按下Ctrl+Tab然后意识到他不想继续。他通常在按住Ctrl 的同时按下Escape。然后它会触发 Windows 系统菜单,普通用户会感到困惑,胆汁质用户会生气......这是一件坏事。换句话说,我希望能够在用户按下Ctrl+Escape 时关闭弹出窗口。怎么做?甚至有可能吗?

如果我像使用其他任何快捷方式一样使用此快捷方式编写代码,则它不起作用并且总是触发 Windows 主菜单。

【问题讨论】:

    标签: windows qt


    【解决方案1】:

    据我了解,如果底层窗口系统截获了按键事件,Qt 通常不会收到它。例如,即使是 QtCreator 也无法覆盖系统范围的快捷方式。

    这个问题几乎是重复的:C++/Qt Global Hotkeys

    虽然该问题专门要求在隐藏/后台应用程序中捕获快捷方式,但我认为基本概念是相同的——在窗口系统处理它们之前捕获快捷方式。

    从那个答案来看,UGlobalHotkey 似乎相当不错,How to use System-Wide Hotkeys in your Qt application 博客文章可能对您的有限用例有用(但请阅读该博客文章中有关修复示例的 cmets)。

    还发现:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-07
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多