【发布时间】:2016-11-08 07:24:15
【问题描述】:
Windows有一个特点:如果当前窗口没有被激活,这个窗口的主菜单看起来是被禁用的(但实际上它只是变灰了,所以你可以点击这个菜单中的任何项目)。切换到别的程序没问题,但是到子窗口就不行了。
即使使用标准记事本也很容易重现这种效果:
- 在里面放任何文字,
- 按Ctrl+F,
- 现在您可以看到主菜单看起来已禁用,但您可以单击其中的任何项目。
问题如下:如何仅为我的程序阻止此效果?在我的程序(C++ 和 Qt)中,当用户转到子窗口。有没有办法阻止它?
我没有在这里放任何代码,因为这种效果在大多数程序中都可以重现。但我希望可以更改我的QMenu 或QMenuBar 的标志/属性以纠正这种行为。有可能吗?
【问题讨论】:
-
实际发生的情况是,当一个窗口没有输入焦点时,它的菜单被绘制成灰色,就好像它被禁用了一样。如果不将输入焦点设置到窗口,就无法调用菜单。当您单击菜单项时,它会将输入焦点设置到窗口(将焦点从弹出对话框中移开),这就是菜单项再次被绘制为启用的原因。如果您单击一个菜单项,然后按两次 Esc 以关闭该菜单,您会发现包含该菜单的窗口仍然保持焦点。所以你所做的就是通过点击改变焦点!
-
对于内置菜单支持的工作方式,您无能为力。这不是不合适的,当您使用键盘选择菜单项时,它们将不起作用。按 Alt 键不显示提示,并且 Alt+F 不选择文件。无模式对话框通常是一个令人头疼的可用性问题。
-
@HansPassant 是的,谢谢,我完全同意当 Alt 键不起作用时(即当此菜单处于非活动状态时)将菜单显示为活动状态很奇怪。但这是客户需要的。有时我们不得不做这样的事情。
标签: c++ windows qt user-interface menu