/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
    \page accelerators.html
    \title Standard Accelerator Keys
    \brief Recommended accelerator keys.

    \ingroup best-practices

    Applications invariably need to define accelerator keys for actions.
    Qt fully supports accelerators, for example with QShortcut. Platform
    defaults for key bindings can also be assigned using QKeySequence::StandardKey.

    Here are Microsoft's recommendations for accelerator keys, with
    comments about the Open Group's recommendations where they exist
    and differ. For most commands, the Open Group either has no advice or
    agrees with Microsoft.

    The emboldened letter plus Alt is Microsoft's recommended choice, and
    we recommend supporting it. For an Apply button, for example, we
    recommend QAbstractButton::setText(\link QObject::tr() tr \endlink("&Apply"));

    If you have conflicting commands (e.g. About and Apply buttons in the
    same dialog), you must decide for yourself.

    \list
    \li \b{\underline{A}}bout
    \li Always on \b{\underline{T}}op
    \li \b{\underline{A}}pply
    \li \b{\underline{B}}ack
    \li \b{\underline{B}}rowse
    \li \b{\underline{C}}lose (CDE: Alt+F4; Alt+F4 is "close window" in Windows)
    \li \b{\underline{C}}opy (CDE: Ctrl+C, Ctrl+Insert)
    \li \b{\underline{C}}opy Here
    \li Create \b{\underline{S}}hortcut
    \li Create \b{\underline{S}}hortcut Here
    \li Cu\b{\underline{t}}
    \li \b{\underline{D}}elete
    \li \b{\underline{E}}dit
    \li \b{\underline{E}}xit (CDE: E\b{\underline{x}}it)
    \li \b{\underline{E}}xplore
    \li \b{\underline{F}}ile
    \li \b{\underline{F}}ind
    \li \b{\underline{H}}elp
    \li Help \b{\underline{T}}opics
    \li \b{\underline{H}}ide
    \li \b{\underline{I}}nsert
    \li Insert \b{\underline{O}}bject
    \li \b{\underline{L}}ink Here
    \li Ma\b{\underline{x}}imize
    \li Mi\b{\underline{n}}imize
    \li \b{\underline{M}}ove
    \li \b{\underline{M}}ove Here
    \li \b{\underline{N}}ew
    \li \b{\underline{N}}ext
    \li \b{\underline{N}}o
    \li \b{\underline{O}}pen
    \li Open \b{\underline{W}}ith
    \li Page Set\b{\underline{u}}p
    \li \b{\underline{P}}aste
    \li Paste \b{\underline{L}}ink
    \li Paste \b{\underline{S}}hortcut
    \li Paste \b{\underline{S}}pecial
    \li \b{\underline{P}}ause
    \li \b{\underline{P}}lay
    \li \b{\underline{P}}rint
    \li \b{\underline{P}}rint Here
    \li P\b{\underline{r}}operties
    \li \b{\underline{Q}}uick View
    \li \b{\underline{R}}edo (CDE: Ctrl+Y, Shift+Alt+Backspace)
    \li \b{\underline{R}}epeat
    \li \b{\underline{R}}estore
    \li \b{\underline{R}}esume
    \li \b{\underline{R}}etry
    \li \b{\underline{R}}un
    \li \b{\underline{S}}ave
    \li Save \b{\underline{A}}s
    \li Select \b{\underline{A}}ll
    \li Se\b{\underline{n}}d To
    \li \b{\underline{S}}how
    \li \b{\underline{S}}ize
    \li S\b{\underline{p}}lit
    \li \b{\underline{S}}top
    \li \b{\underline{U}}ndo (CDE: Ctrl+Z or Alt+Backspace)
    \li \b{\underline{V}}iew
    \li \b{\underline{W}}hat's This?
    \li \b{\underline{W}}indow
    \li \b{\underline{Y}}es
    \endlist

    There are also a lot of other keys and actions (that use other
    modifier keys than Alt). See the Microsoft and The Open Group
    documentation for details.

    The
    \l{http://www.amazon.com/exec/obidos/ASIN/0735605661/trolltech/t}{Microsoft book}
    has ISBN 0735605661. The corresponding Open Group
    book is very hard to find, rather expensive and we cannot recommend
    it. However, if you really want it, ogpubs@opengroup.org might be able
    to help. Ask them for ISBN 1859121047.
*/
