GUI对话框的键盘控制 - 默认按钮是否会随焦点变化?

时间:2011-07-15 12:03:50

标签: qt user-interface focus keyboard-shortcuts

在GUI对话框中,大多数应用程序提供键盘控制,如下所示:

  1. 输入键 - 按下默认按钮。 (默认通常用粗体按钮边框表示。)
  2. Esc键 - 按取消或关闭按钮。
  3. 空格键 - 按下当前具有键盘焦点的小部件。
  4. Tab键 - 将焦点提升到下一个小部件。
  5. 问题是,当键盘焦点位于作为按钮的小部件上时,是否应将默认按钮更改为具有焦点的按钮?

    我发现此行为存在一些问题:

    1. 重绘按钮的显示噪音,以展开原始默认按钮的轮廓,并将焦点下的按钮重新折叠为新的默认按钮。
    2. 使用Enter键,Space键现在有些多余。
    3. 现在没有键盘加速器可以获得正常的默认按钮(通常是OK按钮)。
    4. 然而,似乎趋势是朝着这个方向改变默认按钮,将焦点更改为另一个按钮。这种偏离早期图形用户界面的理由是什么?由于无法按原始默认按钮,它似乎提供的功能较少。人们是否发现原始模型过于复杂,用户无法理解?我认为对话框的键盘控制对于高级用户来说是一项任务,他们可以毫不费力地理解模型,并且喜欢随时为当前按钮(空格)和原始默认按钮(回车)设置加速器。

      请注意,Qt for one支持更改:QPushButton的autoDefault属性负责更改默认按钮的行为。默认情况下,其值为true。因此,您必须采取额外操作将所有按钮设置为false,以防止它们在聚焦时成为默认按钮。

2 个答案:

答案 0 :(得分:3)

这是“离开早期的GUI”,至少不是“早期的GUI”,你的意思是Windows 1.0。您描述的行为从一开始就是这样。

当按下 Enter 键时,聚焦按钮总是“推”。默认按钮仅在以下两种情况下触发:

  • 默认按钮具有焦点(默认情况下),或
  • 重点是一个不处理 Enter 按键的控件(例如静态控件或没有设置ES_WANTRETURN样式标志的单行文本框)

着名的Win32博主Raymond Chen has a post explaining this behavior(专注于最后两段引用的段落):

  

一个对话框保持“默认按钮”的概念(它始终是一个按钮)。默认按钮通常以独特的外观(粗轮廓或不同颜色)绘制,并指示按Enter键时对话框将执行的操作。请注意,这与具有焦点的控件不同。

     

例如,从“开始”菜单中打开“运行”对话框。观察OK按钮是默认按钮;它与其他按钮有不同的外观。但重点是编辑控制。您的输入将转到编辑控件,直到您按Enter键; Enter激活默认按钮,即可。

     

在选择对话框时,观察默认按钮会发生什么。当对话框将焦点移动到按钮时,该按钮将成为新的默认按钮。但是当对话框将焦点移动到完全不是按钮的位置时,“确定”按钮将恢复其作为默认按钮的位置。

     

对话框管理器会在最初创建对话框时记住哪个控件是默认按钮,当它将焦点移动到非按钮时,它会将原始按钮恢复为默认按钮。

答案 1 :(得分:0)

我期望的行为是:

  1. 如果我弹出窗口时按Enter键,则应按默认按钮
  2. 如果我按Tab键,我会开始浏览小部件。在这种情况下,有两种选择:
  3. 2.1我按Enter键 - 此事件应该传递到焦点小部件。 无需更改默认按钮 - 只需将事件移至焦点小部件即可。

    2.2我按下逃跑。在这种情况下,一切都应该在创建窗口后返回到状态。

    注意:

    • 我来自混合背景 - 我不知道我是否在windows,linux或Mobile OS中学到了这一点!这就是我期待事情发展的方式。
    • 我不使用空格键(不知道它的功能)