如何避免 Qt 快捷方式歧义(尤其是当快捷方式有不同的上下文时)?

Posted

技术标签:

【中文标题】如何避免 Qt 快捷方式歧义(尤其是当快捷方式有不同的上下文时)?【英文标题】:How to avoid Qt shortcut ambiguity (especially when the shortcuts have different contexts)? 【发布时间】:2011-04-01 22:15:00 【问题描述】:

我有一个应用程序,它具有 Ctrl+S 作为文件菜单中保存操作的快捷方式。此操作具有 Qt::WindowShortcut 的默认快捷方式上下文。

在这个应用程序中有一个停靠窗口,其中包含一个也使用快捷键 Ctrl+S 的操作。这个快捷方式有上下文 Qt::WidgetShortcut。

窗口快捷方式工作正常。 (如果焦点在我提到的停靠窗口以外的任何地方,如果按下 Ctrl+S 就会执行。)

小部件快捷方式实际上不起作用。也就是说,如果窗口操作被禁用,则小部件 1 可以工作,因为没有歧义。但是如果两个动作都启用了,并且焦点在停靠窗口上,那么 Ctrl+S 什么都不做。

在我看来,期望在相同的活动快捷方式的情况下,如果一个具有比另一个更多的“本地”上下文,它将是执行的。我不认为有任何方法可以告诉 Qt 框架这就是我想要发生的事情?或者解决这个问题的一般方法?我可以简单地更改其中一个快捷方式,这样它们就不会模棱两可了,但是它们是可本地化的并且依赖于平台的,所以我不能保证不会出现其他类似的情况。

【问题讨论】:

您能否将触发小部件快捷方式的消息重定向到您想要的窗口? 我不确定我是否关注你。消息在正确的位置收到,只是最终生成的 QShortcutEvent 设置了其“模糊”标志,因此当每个 QAction 处理事件时,它不会发出其“激活”信号。 【参考方案1】:

我遇到过类似的情况,两个小部件具有相同的快捷方式(用于两个不同的操作),但只有一个被调用。我能够解决这个问题的唯一方法是 1.从两个小部件中的操作中删除快捷方式 2.在父窗口中使用快捷方式创建另一个动作 3. 从窗口处理程序调用适当的小部件处理程序。

【讨论】:

以上是关于如何避免 Qt 快捷方式歧义(尤其是当快捷方式有不同的上下文时)?的主要内容,如果未能解决你的问题,请参考以下文章

Qt/Win 创建应用快捷方式

如何禁用 Qt Mainwindow 快捷方式适用于无模式对话框

如何避免重定向输出符号“>”被当作命令行参数(可能在快捷方式中)

在 Qt Creator 中应用代码更改的快捷方式是啥?

如何将多个 QShortcuts 连接到 Qt 中的一个插槽?并找出插槽内是哪个快捷方式发出的?

Qt创建桌面快捷方式