📄 focus.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Qt Toolkit - Keyboard Focus Overview</title><style type="text/css"><!--h3.fn,span.fn { margin-left: 1cm; text-indent: -1cm; }a:link { color: #004faf; text-decoration: none }a:visited { color: #672967; text-decoration: none }body { background: white; color: black; }--></style></head><body bgcolor="#ffffff"><p><table width="100%"><tr><td><a href="index.html"><img width="100" height="100" src="qtlogo.png"alt="Home" border="0"><img width="100"height="100" src="face.png" alt="Home" border="0"></a><td valign="top"><div align="right"><img src="dochead.png" width="472" height="27"><br><a href="classes.html"><b>Classes</b></a>- <a href="annotated.html">Annotated</a>- <a href="hierarchy.html">Tree</a>- <a href="functions.html">Functions</a>- <a href="index.html">Home</a>- <a href="topicals.html"><b>Structure</b> <font face="Arial,Helvetica,Geneva,Swiss,SunSans-Regular" align="center" size=32>Qte</font></a></div></table><h1 align="center"> Keyboard Focus Overview</h1><br clear="all">Keyboard focus, like much else on the human end of a GUI, tends to befull of exceptions and not at all neat.<p>The basic problem is that the user's keystrokes can be directed at anyof several windows on the screen, and any of several widgets insidethe intended window. The user presses a key, wishing it to go to theright place. The window system is responsible for directing thekeystroke to the window the user wishes, the application running thatwindow for directing each keystroke to the widget the user wishes. Ofcourse the user's wish moves at whim.<p>The application's responsibilities is the subject of this page.<p><h2>Focus motion</h2><p>There are, historically, a few ways in which the user directs thekeyboard focus at a desired widget: <ol><li> The user presses Tab (or Shift-Tab) (or sometimes Enter).<li> The user clicks a widget.<li> The user presses a keyboard shortcut.<li> The user uses the mouse wheel.<li> The user moves the focus to this window, and the application hasto guess to which widget.<p></ol><p>Each of these motion mechanisms is different, and different types ofwidgets receive focus in only some of them. We'll cover each of themin turn.<p><h2>Tab/Shift-Tab.</h2><p>Pressing Tab is by far the most common way to move focus using thekeyboard. Sometimes in data-entry applications Enter does the same asTab. We will ignore that for the moment.<p>Tab, in all window systems in common use today, moves the keyboardfocus to the next widget in a circular per-window list. Tab movesfocus along the circular list in one direction, Shift-Tab in theother. The order in which Tab moves is called the tab order.<p>In Qt, this list is kept in the <a href="qfocusdata.html">QFocusData</a> class. There is oneQFocusData object per window, and widgets automatically appendthemselves to the end of it when <a href="qwidget.html#f92b0f">QWidget::setFocusPolicy()</a> iscalled with an appropriate <a href="qwidget.html#FocusPolicy">QWidget::FocusPolicy</a>. You can customizethe tab order using <a href="qwidget.html#20c984">QWidget::setTabOrder()</a>. (If you don't, Tabgenerally moves focus in the order of widget construction.)<p>Since pressing Tab is so common, most widgets that can have focusshould support tab focus. The major exception is widgets that areonly seldom used, and where there is some keyboard accelerator orerror handler that moves the focus.<p>For example, in a data entry dialog, there might be a field that isonly necessary in one per cent of all cases. In such a dialog, Tabcould skip this field, and the dialog could use one of these twomechanisms: <ul><li> If the program can determine whether the field is needed, it canmove focus there when the user finishes entry and presses Ok, or whenthe user presses Enter after finishing the other fields.<li> The label for the field can include a keyboard shortcut thatmoves focus to this field.<p></ul><p>There is also another exception to Tab support is text-entry widgetsthat must support tab; almost all text editors fall into this class.Qt treats Control-Tab as Tab and Control-Shift-Tab as Shift-Tab, andsuch widgets can reimplement <a href="qwidget.html#6ff658">QWidget::event()</a> and handle Tab beforecalling QWidget::event() to get normal processing of all other keys.However, since some systems use Control-Tab for other purposes, andmany users aren't aware of Control-Tab anyway, this isn't a completesolution.<p><h2>The user clicks a widget.</h2><p>This is perhaps even more common than pressing Tab on computers with agood mouse or other pointing device.<p>Clicking to move the focus is slightly more powerful than Tab. Whileit moves the focus <em>to</em> a widget, for editor widgets it also movesthe text cursor (the widget's internal focus) to the spot where themouse is clicked.<p>Since it is so common, it's a good idea to support it for mostwidgets. People are used to it. However, there is also an importantreason to avoid it: You may not want to remove focus from the widgetwhere it was.<p>For example, in a word processor, when the user clicks the 'B'(boldface) tool button, what should happen to the keyboard focus?Should it remain where it was, almost certainly in the editing widget,or should it move to the 'B' button?<p>We advise supporting click-to-focus for widgets that support textentry, and to avoid it for most widgets where a mouse click has adifferent effect. (For buttons, we also recommend adding a keyboardshortcut - <a href="qbutton.html">QButton</a> and its subclasses make that very easy.)<p>For widgets that don't fall into either class, we have no advice.<p>In Qt, only the <a href="qwidget.html#f92b0f">QWidget::setFocusPolicy()</a> function affectsclick-to-focus.<p><h2>The user presses a keyboard shortcut.</h2><p>It's not unusual for keyboard shortcuts to move the focus. This canhappen implicitly by opening modal dialogs, but also explicitly usingfocus accelerators such as are provided by <a href="qlabel.html#085fdb">QLabel::setBuddy()</a>, <a href="qgroupbox.html">QGroupBox</a> and <a href="qtabbar.html">QTabBar</a>.<p>We advise supporting shortcut focus for all widgets that the user maywant to jump to. For example, a tab dialog can have keyboardshortcuts for each of its pages, so the user can press e.g. Alt-P tostep to the <u>P</u>rinting page. But don't overdo this - there areonly a few keys, and it's also important to provide keyboard shortcutsfor commands. Alt-P is also used for Paste, Play, Print and Print Herein the <a href="accelerators.html">standard list of shortcuts,</a> forexample.<p><h2>The user uses the mouse wheel.</h2><p>On Microsoft Windows, mouse wheel usage is always handled by thewidget that has keyboard focus. On X11, it's handled by the widgetthat get other mouse events.<p>The way Qt handles this platform difference is by letting widgets movethe keyboard focus when the wheel is used. With the right focuspolicy on each widget, applications can work idiomatically correctlyon both Windows and X11.<p><h2>The user moves the focus to this window.</h2><p>(and the application has to guess to which widget).<p>This can be simple: If the focus has been in this window before, thenthe last widget to have focus should regain it. Qt does thatautomatically.<p>If focus has never been in this window before and you know where focusshould start out, call <a href="qwidget.html#25775a">QWidget::setFocus()</a> on that widget beforeyou <a href="qwidget.html#200ee5">QWidget::show()</a> it. If you don't, Qt will pick some suitablewidget.<p><address><hr><div align="center"><table width="100%" cellspacing="0" border="0"><tr><td>Copyright
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -