在GUI对话框中,大多数应用程序提供键盘控制,如下所示:
问题是,当键盘焦点位于作为按钮的小部件上时,是否应将默认按钮更改为具有焦点的按钮?
我发现此行为存在一些问题:
然而,似乎趋势是朝着这个方向改变默认按钮,将焦点更改为另一个按钮。这种偏离早期图形用户界面的理由是什么?由于无法按原始默认按钮,它似乎提供的功能较少。人们是否发现原始模型过于复杂,用户无法理解?我认为对话框的键盘控制对于高级用户来说是一项任务,他们可以毫不费力地理解模型,并且喜欢随时为当前按钮(空格)和原始默认按钮(回车)设置加速器。
请注意,Qt for one支持更改:QPushButton的autoDefault属性负责更改默认按钮的行为。默认情况下,其值为true。因此,您必须采取额外操作将所有按钮设置为false,以防止它们在聚焦时成为默认按钮。
答案 0 :(得分:3)
这是不“离开早期的GUI”,至少不是“早期的GUI”,你的意思是Windows 1.0。您描述的行为从一开始就是这样。
当按下 Enter 键时,聚焦按钮总是“推”。默认按钮仅在以下两种情况下触发:
ES_WANTRETURN
样式标志的单行文本框) 着名的Win32博主Raymond Chen has a post explaining this behavior(专注于最后两段引用的段落):
一个对话框保持“默认按钮”的概念(它始终是一个按钮)。默认按钮通常以独特的外观(粗轮廓或不同颜色)绘制,并指示按Enter键时对话框将执行的操作。请注意,这与具有焦点的控件不同。
例如,从“开始”菜单中打开“运行”对话框。观察OK按钮是默认按钮;它与其他按钮有不同的外观。但重点是编辑控制。您的输入将转到编辑控件,直到您按Enter键; Enter激活默认按钮,即可。
在选择对话框时,观察默认按钮会发生什么。当对话框将焦点移动到按钮时,该按钮将成为新的默认按钮。但是当对话框将焦点移动到完全不是按钮的位置时,“确定”按钮将恢复其作为默认按钮的位置。
对话框管理器会在最初创建对话框时记住哪个控件是默认按钮,当它将焦点移动到非按钮时,它会将原始按钮恢复为默认按钮。
答案 1 :(得分:0)
我期望的行为是:
2.1我按Enter键 - 此事件应该传递到焦点小部件。 无需更改默认按钮 - 只需将事件移至焦点小部件即可。
2.2我按下逃跑。在这种情况下,一切都应该在创建窗口后返回到状态。
注意: