/****************************************************************************
**
** 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 qtquick-usecase-userinput.html
\title Use Case - Responding To User Input in QML
\brief Example of how to accept user input and respond to it in a QML application

\section1 Supported types of user input

The \l {Qt Quick} module provides support for the most common types of user input,
including mouse and touch events, text input, and key-press events.  Other
modules provide support for other types of user input for example, the
\l {Qt Sensors} module provides support for shake-gestures in QML applications.

This article covers how to handle basic user input; for further information
about motion-gesture support, see the \l {Qt Sensors} documentation. For
information about audio-visual input, see the \l {Qt Multimedia} documentation.

\section2 Mouse and touch events

The \l{Input Handlers}{input handlers} let QML applications handle mouse and
touch events. For example, you could create a button by adding a
\l TapHandler to an Image, or to a \l Rectangle with a \l Text object inside.
The \l TapHandler responds to taps or clicks on any type of pointing device.

\snippet qmlapp/usecases/userinput.qml 0

For more advanced use cases such as, drag, pinch and zoom gestures, see
documentation for the \l DragHandler and \l PinchHandler types.

\note Some types have their own built-in input handling. For example,
\l Flickable responds to mouse dragging and mouse wheel scrolling. It handles
touch dragging and flicking via synthetic mouse events that are created when
the touch events are not handled.

\section2 Keyboard and button events

Button and key presses, from buttons on a device, a keypad, or a keyboard,
can all be handled using the \l Keys attached property. This attached property
is available on all \l Item derived types, and works with the \l Item::focus property
to determine which type receives the key event. For simple key handling, you can set the focus
to true on a single \l Item and do all your key handling there.

\snippet qmlapp/usecases/userinput-keys.qml 0

For text input, we have several QML types to choose from. TextInput provides an
unstyled single-line editable text, while TextField is more suitable for
form fields in applications. TextEdit can handle multi-line editable text,
but TextArea is a better alternative as it adds styling.

The following snippet demonstrates how to use these types in your application:

\snippet qmlapp/usecases/userinput-text.qml 0
*/
