1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick
// Deliberately imported after QtQuick to avoid missing restoreMode property in Binding. Fix in Qt 6.
import QtQml
import QtQuick.VirtualKeyboard
import QtQuick.VirtualKeyboard.Components
/*!
\qmltype InputPanel
\inqmlmodule QtQuick.VirtualKeyboard
\brief Provides the virtual keyboard UI.
\ingroup qmlclass
\ingroup qtvirtualkeyboard-qml
The keyboard size is automatically calculated from the available
width; that is, the keyboard maintains the aspect ratio specified by the current
style. Therefore the application should only set the \l {Item::}{width} and \l {Item::}{y}
coordinates of the InputPanel, and not the \l {Item::}{height}.
As with \l {Qt Virtual Keyboard QML Types}{all other QML types} provided by
the module, the \c QT_IM_MODULE environment variable must be set to
\c qtvirtualkeyboard before using InputPanel. For more information, see
\l {Loading the Plugin}.
\note You can have only one InputPanel instance in your application. The panel
will not be blocked by modal dialogs, but it can be obscured by items with a higher
\l {Item::}{z} value.
*/
Item {
id: inputPanel
/*!
\qmlproperty bool InputPanel::active
\since QtQuick.VirtualKeyboard 2.0
This property reflects the active status of the input panel.
The keyboard should be made visible to the user when this property is
\c true.
*/
property alias active: keyboard.active
/*!
\qmlproperty bool InputPanel::externalLanguageSwitchEnabled
\since QtQuick.VirtualKeyboard 2.4
This property enables the external language switch mechanism.
When this property is \c true, the virtual keyboard will not show
the built-in language popup, but will emit the \l externalLanguageSwitch
signal instead. The application can handle this signal and show a
custom language selection dialog instead.
*/
property bool externalLanguageSwitchEnabled
/*!
\qmlsignal InputPanel::externalLanguageSwitch(var localeList, int currentIndex)
\since QtQuick.VirtualKeyboard 2.4
This signal is emitted when \l externalLanguageSwitchEnabled is \c true
and the \l {user-guide-language}{language switch key} is pressed by the user.
It serves as a hook to display a custom language dialog instead of
the built-in language popup in the virtual keyboard.
The \a localeList parameter contains a list of locale names to choose
from. To get more information about a particular language, use the
\l[QtQml]{Qt::locale()}{Qt.locale()} function. The \a currentIndex
is the index of current locale in the \a localeList. This item should
be highlighted as the current item in the UI.
To select a new language, use the \l {VirtualKeyboardSettings::locale}
{VirtualKeyboardSettings.locale} property.
Below is an example that demonstrates a custom language dialog implementation:
\snippet qtvirtualkeyboard-custom-language-popup.qml popup
The dialog would then be declared:
\snippet qtvirtualkeyboard-custom-language-popup.qml declaring
In the application's InputPanel, add the following code:
\snippet qtvirtualkeyboard-custom-language-popup.qml using
The custom dialog will now be shown when the language switch key is pressed.
*/
signal externalLanguageSwitch(var localeList, int currentIndex)
/*! \internal */
property alias keyboard: keyboard
/*! \internal */
property bool desktopPanel: false
/*! \internal */
property point screenPos: desktopPanel ? Qt.point(keyboard.x, keyboard.y) : Qt.point(x, y)
SelectionControl {
objectName: "selectionControl"
x: -parent.x
y: -parent.y
enabled: active && !keyboard.fullScreenMode && !desktopPanel
}
implicitHeight: keyboard.height - keyboard.wordCandidateView.currentYOffset
Keyboard {
id: keyboard
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
}
MouseArea {
z: -1
anchors.fill: keyboard
enabled: active
}
Binding {
target: InputContext.priv
property: "keyboardRectangle"
value: keyboardRectangle()
when: !InputContext.animating
restoreMode: Binding.RestoreBinding
}
/*! \internal */
function keyboardRectangle() {
var rect = Qt.rect(0, 0, keyboard.width, keyboard.height)
const screenPosX = screenPos.x
const screenPosY = screenPos.y
if (desktopPanel) {
rect.x += screenPosX
rect.y += screenPosY
}
return mapToItem(null, rect)
}
}
|