在GUI对话框中,大多数应用程序提供如下键盘控制:
- 回车键-按默认键。(默认值通常用粗体按钮边框表示)
- Esc键-按取消或关闭按钮。
- 空格键-按下当前有键盘焦点的小部件。
- Tab键-将焦点推进到下一个小部件。
问题是,当键盘焦点是一个按钮的小部件时,是否应该将默认按钮更改为具有焦点的按钮?
我发现这个行为有一些问题:
- 重绘按钮显示噪声,取消原有默认按钮的轮廓,将焦点下的按钮重新加粗为新的默认按钮。
- 空格键现在和Enter键有点多余了。 现在没有键盘加速键来获得正常的默认按钮(通常是OK按钮)。
然而,趋势似乎是在这个方向上改变默认按钮,焦点改变到另一个按钮。这种背离早期gui的基本原理是什么?由于没有办法按原来的默认按钮,它似乎提供了更少的功能。人们是否发现最初的模型过于复杂,用户无法理解?我认为键盘控制对话框是高级用户的任务,他们理解模型没有问题,更喜欢在任何时候都有当前按钮(空格)和原始默认按钮(Enter)的加速器。
QPushButton的autoDefault属性负责改变默认按钮的行为。默认值为true。因此,您必须采取额外的操作将所有按钮设置为false,以防止它们在聚焦时成为默认按钮。这并不是与早期的gui "的背离,至少如果你所说的早期gui "指的是Windows 1.0的话。你所描述的行为从一开始就是这样的。
焦点按钮总是 pushed"当按Enter键时。默认按钮仅在以下两种情况下触发:
- 默认按钮有焦点(默认情况下),或
- 焦点放在不处理输入按键的控件上(例如静态控件,或者没有设置
ES_WANTRETURN
样式标志的单行文本框)。
著名的Win32博主Raymond Chen有一篇文章解释了这种行为(特别关注最后两段):
对话框维护"默认按钮"的概念;(它总是一个按钮)。默认按钮通常以独特的外观(粗大的轮廓或不同的颜色)绘制,并指示当您按Enter时对话框将采取的操作。请注意,这与具有焦点的控件不同。
例如,从开始菜单中打开运行对话框。注意OK按钮是默认按钮;它的外观和其他按钮不一样。但重点是编辑控件。你的输入会进入编辑控件,直到你按回车键;回车激活默认按钮,这是OK。
当您通过选项卡浏览对话框时,观察默认按钮发生了什么变化。当对话框将焦点移到一个按钮上时,该按钮将成为新的默认按钮。但是,当对话框将焦点移到一个根本不是按钮的东西上时,OK按钮将恢复其默认按钮的位置。
对话框管理器记住在最初创建对话框时哪个控件是默认按钮,当它将焦点移到非按钮上时,它将恢复原始按钮作为默认按钮。
我期望的行为是:
- 如果我在窗口刚弹出时按回车键,它应该按默认按钮
- 如果我按tab键,我开始浏览小部件。在这种情况下,有两个选项:
2.1我按enter -这个事件应该被传递到被关注的小部件。不需要更改默认按钮 -只需将事件交给焦点小部件。
2.2按转义键。在这种情况下,一切都应该回到窗口创建后的状态。
指出:
- 我来自一个混合的背景-我不知道我是在windows, linux或移动操作系统中学到的!这正是我所期望的事情解决的方式。
- 我没有使用空格键(不知道它的功能)