2011-04-01 28 views
3

我有一个应用程序具有Ctrl + S作为文件菜单中的保存操作的快捷方式。此操作具有Qt :: WindowShortcut的默认快捷环境。如何避免Qt快捷模糊(特别是当快捷方式有不同的上下文时)?

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

窗口快捷方式工作正常。 (当焦点在除了我提到的对接窗口之外的任何地方时,如果按下Ctrl + S,则执行它。)

小部件快捷方式并不真正起作用。也就是说,如果窗口操作被禁用,那么这个窗口小部件就起作用了,因为没有歧义。但是,如果两项操作均已启用,并且焦点在对接窗口上,则Ctrl + S将不执行任何操作。

在我看来,如果期望在相同的主动快捷键的情况下,如果一个人拥有比另一个更多的“本地”上下文,那么它就是执行的人。我不认为有什么办法可以告诉Qt框架,那就是我想要发生的事情吗?或者通用的方法来解决这个问题?我可以简单地改变其中一个快捷方式,使它们不含糊,但这些快捷方式是可本地化的和依赖平台的,所以我不能保证不会出现其他类似的情况。

+0

您是否能够将触发widgetshortcut的消息重定向到您想要的窗口? – 2011-04-01 22:43:25

+0

我不知道我跟着你。消息在正确的位置被接收,只是最终生成的QShortcutEvent设置了“模糊”标志,所以当每个QAction处理事件时,它都不会发出它的“激活”信号。 – Owen 2011-04-01 22:52:27

回答

1

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