Qt应用 键盘聚焦

移动开发
本文介绍的是Qt应用 键盘聚焦,关于聚焦,系统必须要决断击键动作直接聚焦在哪个应用程序,应用程序的哪个窗口,窗口的哪个部件。先来看内容。

Qt应用 键盘聚焦是本文介绍的内容,关于键盘的更多内容,请参考本文末尾。Qt的部件按照GUI设计中的惯例来处理键盘聚焦

基本的问题就是,用户的击键动作能够直接聚焦在屏幕上的任意窗口,或者是内嵌在特定窗口的任意部件上。当用户按下一个键时,他们期望焦点在他们期望的位置,软件必须要满足这个需求。系统必须要决断击键动作直接聚焦在哪个应用程序,应用程序的哪个窗口,窗口的哪个部件。

聚焦动作

键盘焦点聚集在一个特定的部件上的惯例有以下几种:

1、用户按下Tab(或者Shift+Tab)

2、用户点击一个部件

3、用户按下一个键盘快捷键

4、用户使用鼠标滚轮

5、用户把焦点移动到一个窗口,这时应用程序必须决定窗口的哪个部件应该获得焦点

以上这些动作机制是不同的,这些动作之中,会有不同的部件接收到焦点。下面将依次介绍:

Tab 或者 Shift+Tab

按下Tab键是使用键盘移动焦点最常用的方式。(有时在数据录入型应用程序中Enter的作用和Tab键一样;在Qt中通过一个event filter很容易实现)

在常用的所有窗口系统中按下Tab键,每个窗口都有一个包含了其上所有部件的循环列表,焦点会切换到这个列表的下一个部件。Tab键会按照循环列表的一个方向切换焦点,而Shift+Tab按照相反的方向切换。按下Tab键后在部件之间切换的顺序被称为tab顺序。

你可以使用QWidget::setTabOrder()来定制tab顺序。(如果你不这样做,Tab通常会以部件创建的顺序切换焦点)Qt Designer提供一种可视化的方式来改变tab顺序。

因为按下Tab键非常常用,大部分可以获得焦点的部件都支持tab聚焦。有些罕见的部件是个例外,他们通过一些键盘加速器或者错误(keyboard accelerator or error)来切换焦点。

举个例子,在一个数据录入型对话框中,有一个只有在百分之一的情况下才必要的区域。在这样的对话框中,Tab键就会跳过这个区域,对话框可以使用以下机制:

1、如果程序可以决定这个区域是否需要,它可以在用户完成录入按下OK键,或者当用户完成其它区域的录入之后按下Enter,把焦点切换到那里。或者,将此区域包含在tab顺序中但将它禁用。当用户已经设置完其它的区域,该区域变得比较适合时,再启用它。

2、此区域上的标签可以包括一个键盘快捷键,以使焦点可以切换到此区域上。

关于Tab支持的另外一种例外是必须支持tab插入的文本录入型部件;几乎所有的文本编辑器都属于这一类。Qt把Ctrl+Tab当做Tab,Ctrl+Shift+Tab当做Shift+Tab,这些部件可以重新实现QWidget::event()函数,在调用QWidget::event()完成所有其它按键的正常处理之前处理Tab.然而,因为一些系统将Ctrl+Tab用作其它的用途,用户因此可能不知道Ctrl+Tab,总的来说并没有一种完全的解决办法。

用户点击部件

这可能是在使用鼠标或者其它点式设备的电脑上比Tab键更常见的聚焦方式。

通过点击来切换焦点比Tab更强大一些。当把焦点移动到某一个部件时,对于编辑型部件而言,文本的光标(部件内部焦点)也会移动到了鼠标点击的位置点上。

由于这种方式如此的常见,用户很习惯这种方式,自然而然的应该是大部分部件都支持这种方式。然而,也存在一些需要的理由要规避这种方式:比如用户可能不想从当前焦点所在的部件上移除焦点。

举例来说,再一个文本编辑器中,当用户点击‘B’(粗体)功能按钮,键盘焦点应该怎么应对?是应该保留在它所在的位置,一般来说这个时候肯定是在编辑文本当中,还是将焦点移动到‘B’按钮处?

我们建议支持文本录入的部件同时支持点击聚焦,为了避免上述情况鼠标点击在不同的情况下会承担不同的作用。(对于按钮来说,我们推荐添加键盘快捷键,QAbstractButton及其子类可以很容易实现)

在Qt中,只有QWidget::setFocusPolicy()函数会影响点击聚焦。

用户按下键盘快捷键

通过键盘快捷键来切换焦点不是很常见。在打开模态对话框时会隐式发生,但是如果使用诸如QLabel::setBuddy(),QGroupBox,QTabBar提供的焦点加速器时会明确的发生。

我们建议用户想要跳转的所有部件都支持快捷键聚焦。举例来说,一个标签对话框可以为每个页面设置键盘快捷键,因此用户可以按下比如Alt+P快捷键来跳转到打印页面。但是按键总共就只有那么多,所以为命令提供键盘快捷键显得很重要。Alt+P也可以用作粘贴、播放、打印的快捷键,比如在Standard Accelerator Keys列表中就这样用。

用户滚动鼠标滚轮

在微软Windows操作系统中,鼠标滚轮往往是由具有键盘焦点的部件来处理。在Mac OS X和X11中,则是由获得其它鼠标事件的部件来处理。

Qt处理这种平台差异性的方法是当使用滚轮时让部件切换键盘焦点。应用程序遵循每个部件上的正确的聚焦策略,应用程序就可以以惯用的方式在Windows,Mac OS X,和X11平台上正确的运行。

用户把焦点移动到窗口

在这种情况下,应用程序必须决定窗口内的哪个部件获得焦点。

这可能很简单,如果焦点之前已经在该窗口上,之前获得焦点的***一个部件会重新获得焦点。Qt可以自动实现。

如果焦点之前从没有聚焦到该窗口上,而且你知道焦点应该开始于哪里,在调用QWidget::show()之前调用某部件上的QWidget::setFocus(),该部件就会获得焦点。如果不这样做,Qt会挑选一个合适的部件来使它获得焦点。

小结:关于Qt应用 键盘聚焦的内容到这里就介绍完了,希望本文能对你有所帮助。更多相关 内容请参考编辑推荐。

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-06-29 18:09:57

Qt 矩阵键盘

2011-06-29 15:14:22

Qt Embedded 键盘

2011-06-29 15:36:21

Qt Embedded 键盘

2011-06-22 10:27:32

QT 键盘 焦点

2012-10-23 17:16:16

企业云宝德云计算

2009-10-14 19:22:30

多路服务器曙光

2021-07-30 09:53:22

JavaScriptfocusblur

2011-09-09 17:59:26

QT Widget

2011-03-22 10:36:27

汉柏行业定制化

2010-07-29 10:40:12

2011-06-09 09:12:12

QT symbian

2011-06-15 18:20:20

Qt 移植 Android

2011-09-07 16:36:00

Qt Widget

2011-09-07 16:28:46

QT WidgetQWidget

2011-06-21 14:53:25

QT 界面美化 QStyle

2021-08-17 10:26:27

无人机农业安全

2015-05-27 13:29:06

PWorld

2020-02-26 08:30:14

RSAC2020应用安全DevSecOps

2011-09-09 17:24:39

Qt Webkit模块
点赞
收藏

51CTO技术栈公众号