Supported types of user input▲
The 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.
This article covers how to handle basic user input. For information about audio-visual input, see the Qt Multimedia documentation.
Mouse and touch events▲
The input handlers let QML applications handle mouse and touch events. For example, you could create a button by adding a TapHandler to an Image, or to a Rectangle with a Text object inside. The TapHandler responds to taps or clicks on any type of pointing device.
import
QtQuick
Item
{
id
:
root
width
:
320
height
:
480
Rectangle
{
color
:
"#272822"
width
:
320
height
:
480
}
Rectangle
{
id
:
rectangle
x
:
40
y
:
20
width
:
120
height
:
120
color
:
"red"
TapHandler {
onTapped
:
rectangle.width +=
10
}
}
}
Some Item types have their own built-in input handling. For example, Flickable responds to mouse dragging, touch flicking, and mouse wheel scrolling.
Keyboard and button events▲
import
QtQuick
Item
{
id
:
root
width
:
320
height
:
480
Rectangle
{
color
:
"#272822"
width
:
320
height
:
480
}
Rectangle
{
id
:
rectangle
x
:
40
y
:
20
width
:
120
height
:
120
color
:
"red"
focus
:
true
Keys.onUpPressed
:
rectangle.y -=
10
Keys.onDownPressed
:
rectangle.y +=
10
Keys.onLeftPressed
:
rectangle.x +=
10
Keys.onRightPressed
:
rectangle.x -=
10
}
}
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:
import
QtQuick
import
QtQuick.Controls
import
QtQuick.Layouts
ApplicationWindow
{
width
:
300
height
:
200
visible
:
true
ColumnLayout
{
anchors.fill
:
parent
TextField
{
id
:
singleline
text
:
"Initial Text"
Layout.alignment
:
Qt.AlignHCenter |
Qt.AlignTop
Layout.margins
:
5
background
:
Rectangle
{
implicitWidth
:
200
implicitHeight
:
40
border.color
:
singleline.focus ? "#21be2b"
:
"lightgray"
color
:
singleline.focus ? "lightgray"
:
"transparent"
}
}
TextArea
{
id
:
multiline
placeholderText
:
"Initial text\n...\n...\n"
Layout.alignment
:
Qt.AlignLeft
Layout.fillWidth
:
true
Layout.fillHeight
:
true
Layout.margins
:
5
background
:
Rectangle
{
implicitWidth
:
200
implicitHeight
:
100
border.color
:
multiline.focus ? "#21be2b"
:
"lightgray"
color
:
multiline.focus ? "lightgray"
:
"transparent"
}
}
}
}