Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qohoskeyeventconverthelpers.cpp
Go to the documentation of this file.
1
// Copyright (C) 2025 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4
#
include
<
qohoskeyeventconverthelpers
.
h
>
5
6
#
include
<
QtCore
/
qmap
.
h
>
7
8
QT_BEGIN_NAMESPACE
9
10
namespace
QtKeyEventHelpers
{
11
12
namespace
{
13
14
const
QMap<Qt::Key, QPair<OhosKeyboardModifier, Qt::KeyboardModifier>> qtKeyToModifiersMap = {
15
{Qt::Key_Shift, {OhosKeyboardModifier::SHIFT, Qt::ShiftModifier}},
16
{Qt::Key_Alt, {OhosKeyboardModifier::ALT, Qt::AltModifier}},
17
{Qt::Key_Control, {OhosKeyboardModifier::CTRL, Qt::ControlModifier}},
18
{Qt::Key_Meta, {OhosKeyboardModifier::LOGO, Qt::MetaModifier}},
19
};
20
21
bool
isNoModificatorPressed(Qt::KeyboardModifiers keyboardModifiers)
22
{
23
return
keyboardModifiers.testFlag(Qt::NoModifier);
24
}
25
26
bool
isOnlyKeypadModificatorOn(Qt::KeyboardModifiers keyboardModifiers)
27
{
28
return
keyboardModifiers == Qt::KeyboardModifiers(Qt::KeypadModifier);
29
}
30
31
char
tryConvertKeyEventToKeyCharOrNull(
const
Qt::Key &key, Qt::KeyboardModifiers qtModifiers)
32
{
33
bool
onlyShiftModPressed = isOnlyShiftModificatorPressed(qtModifiers);
34
bool
onlyKeypadModificatorOn = isOnlyKeypadModificatorOn(qtModifiers);
35
bool
noModPressed = isNoModificatorPressed(qtModifiers);
36
bool
useNoModifiedKeyText = noModPressed || onlyKeypadModificatorOn;
37
38
switch
(key) {
39
case
Qt::Key_Space:
return
' '
;
40
case
Qt::Key_Backspace:
return
'\x08'
;
41
case
Qt::Key_Tab:
return
'\x09'
;
42
case
Qt::Key_Enter:
return
'\x0D'
;
43
case
Qt::Key_Return:
return
'\x0D'
;
44
case
Qt::Key_Delete:
return
'\x7F'
;
45
case
Qt::Key_Escape:
return
'\x1B'
;
46
default
:
47
break
;
48
}
49
50
if
(onlyShiftModPressed || useNoModifiedKeyText) {
51
switch
(key) {
52
case
Qt::Key_A:
return
'a'
;
53
case
Qt::Key_B:
return
'b'
;
54
case
Qt::Key_C:
return
'c'
;
55
case
Qt::Key_D:
return
'd'
;
56
case
Qt::Key_E:
return
'e'
;
57
case
Qt::Key_F:
return
'f'
;
58
case
Qt::Key_G:
return
'g'
;
59
case
Qt::Key_H:
return
'h'
;
60
case
Qt::Key_I:
return
'i'
;
61
case
Qt::Key_J:
return
'j'
;
62
case
Qt::Key_K:
return
'k'
;
63
case
Qt::Key_L:
return
'l'
;
64
case
Qt::Key_M:
return
'm'
;
65
case
Qt::Key_N:
return
'n'
;
66
case
Qt::Key_O:
return
'o'
;
67
case
Qt::Key_P:
return
'p'
;
68
case
Qt::Key_Q:
return
'q'
;
69
case
Qt::Key_R:
return
'r'
;
70
case
Qt::Key_S:
return
's'
;
71
case
Qt::Key_T:
return
't'
;
72
case
Qt::Key_U:
return
'u'
;
73
case
Qt::Key_V:
return
'v'
;
74
case
Qt::Key_W:
return
'w'
;
75
case
Qt::Key_X:
return
'x'
;
76
case
Qt::Key_Y:
return
'y'
;
77
case
Qt::Key_Z:
return
'z'
;
78
case
Qt::Key_0:
return
'0'
;
79
case
Qt::Key_1:
return
'1'
;
80
case
Qt::Key_2:
return
'2'
;
81
case
Qt::Key_3:
return
'3'
;
82
case
Qt::Key_4:
return
'4'
;
83
case
Qt::Key_5:
return
'5'
;
84
case
Qt::Key_6:
return
'6'
;
85
case
Qt::Key_7:
return
'7'
;
86
case
Qt::Key_8:
return
'8'
;
87
case
Qt::Key_9:
return
'9'
;
88
case
Qt::Key_QuoteLeft:
return
'`'
;
89
case
Qt::Key_Minus:
return
'-'
;
90
case
Qt::Key_Equal:
return
'='
;
91
case
Qt::Key_BracketLeft:
return
'['
;
92
case
Qt::Key_BracketRight:
return
']'
;
93
case
Qt::Key_Backslash:
return
'\\'
;
94
case
Qt::Key_Semicolon:
return
';'
;
95
case
Qt::Key_Apostrophe:
return
'\''
;
96
case
Qt::Key_Comma:
return
','
;
97
case
Qt::Key_Period:
return
'.'
;
98
case
Qt::Key_Slash:
return
'/'
;
99
case
Qt::Key_ParenRight:
return
')'
;
100
case
Qt::Key_Exclam:
return
'!'
;
101
case
Qt::Key_At:
return
'@'
;
102
case
Qt::Key_NumberSign:
return
'#'
;
103
case
Qt::Key_Dollar:
return
'$'
;
104
case
Qt::Key_Percent:
return
'%'
;
105
case
Qt::Key_AsciiCircum:
return
'^'
;
106
case
Qt::Key_Ampersand:
return
'&'
;
107
case
Qt::Key_Asterisk:
return
'*'
;
108
case
Qt::Key_ParenLeft:
return
'('
;
109
case
Qt::Key_AsciiTilde:
return
'~'
;
110
case
Qt::Key_Underscore:
return
'_'
;
111
case
Qt::Key_Plus:
return
'+'
;
112
case
Qt::Key_BraceLeft:
return
'{'
;
113
case
Qt::Key_BraceRight:
return
'}'
;
114
case
Qt::Key_Bar:
return
'|'
;
115
case
Qt::Key_Colon:
return
':'
;
116
case
Qt::Key_QuoteDbl:
return
'"'
;
117
case
Qt::Key_Less:
return
'<'
;
118
case
Qt::Key_Greater:
return
'>'
;
119
case
Qt::Key_Question:
return
'?'
;
120
default
:
121
break
;
122
}
123
}
124
125
return
'\0'
;
126
}
127
128
}
129
130
Qt
::
KeyboardModifiers
convertOhosToQtKeyboardModifiersWithNumpad
(
131
QFlags<OhosKeyboardModifier> ohosKeysModifiers,
bool
keyFromNumPad)
132
{
133
auto
keyboardModifiers = convertOhosToQtKeyboardModifiers(ohosKeysModifiers);
134
keyboardModifiers.setFlag(Qt::KeypadModifier, keyFromNumPad);
135
136
return
keyboardModifiers;
137
}
138
139
bool
isOnlyShiftModificatorPressed
(Qt::KeyboardModifiers keyboardModifiers)
140
{
141
return
keyboardModifiers.testFlag(Qt::ShiftModifier) &&
142
!keyboardModifiers.testFlag(Qt::AltModifier) &&
143
!keyboardModifiers.testFlag(Qt::ControlModifier);
144
}
145
146
QString
tryConvertQtKeyCodeToKeyText
(
147
const
Qt::Key &key, Qt::KeyboardModifiers qtModifiers, QFlags<OhosKeyboardModifier> ohosKeysModifiers)
148
{
149
auto
keyChar = QChar::fromLatin1(tryConvertKeyEventToKeyCharOrNull(key, qtModifiers));
150
bool
keyCapsLockFlagOn = ohosKeysModifiers.testFlag(
OhosKeyboardModifier
::
CAPS_LOCK
);
151
auto
effectiveKeyChar =
152
keyChar.isLetter() && keyCapsLockFlagOn != isOnlyShiftModificatorPressed(qtModifiers)
153
? keyChar.toUpper()
154
: keyChar;
155
return
!effectiveKeyChar.isNull() ? QString(effectiveKeyChar) : QString();
156
}
157
158
Qt
::
KeyboardModifiers
convertCurrentOhosKeyModifiersForQGuiApplication
(
159
Qt::KeyboardModifiers lastKeyboardModifiers, QFlags<OhosKeyboardModifier> ohosKeysModifiers, Qt::Key qtKey)
160
{
161
auto
modifiers = lastKeyboardModifiers;
162
if
(qtKeyToModifiersMap.contains(qtKey)) {
163
const
auto
actualKeyModifiers = qtKeyToModifiersMap.value(qtKey);
164
const
auto
ohosModifier = actualKeyModifiers.first;
165
const
auto
qtModifier = actualKeyModifiers.second;
166
modifiers.setFlag(qtModifier, !ohosKeysModifiers.testFlag(ohosModifier));
167
}
168
return
modifiers;
169
}
170
171
}
172
173
QT_END_NAMESPACE
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
QtKeyEventHelpers
Definition
qohoskeyeventconverthelpers.cpp:10
QtKeyEventHelpers::convertOhosToQtKeyboardModifiersWithNumpad
Qt::KeyboardModifiers convertOhosToQtKeyboardModifiersWithNumpad(QFlags< OhosKeyboardModifier > ohosKeysModifiers, bool keyFromNumPad)
Definition
qohoskeyeventconverthelpers.cpp:130
QtKeyEventHelpers::convertCurrentOhosKeyModifiersForQGuiApplication
Qt::KeyboardModifiers convertCurrentOhosKeyModifiersForQGuiApplication(Qt::KeyboardModifiers lastKeyboardModifiers, QFlags< OhosKeyboardModifier > ohosKeysModifiers, Qt::Key qtKey)
Definition
qohoskeyeventconverthelpers.cpp:158
QtKeyEventHelpers::isOnlyShiftModificatorPressed
bool isOnlyShiftModificatorPressed(Qt::KeyboardModifiers keyboardModifiers)
Definition
qohoskeyeventconverthelpers.cpp:139
QtKeyEventHelpers::tryConvertQtKeyCodeToKeyText
QString tryConvertQtKeyCodeToKeyText(const Qt::Key &key, Qt::KeyboardModifiers qtModifiers, QFlags< OhosKeyboardModifier > ohosKeysModifiers)
Definition
qohoskeyeventconverthelpers.cpp:146
OhosKeyboardModifier
OhosKeyboardModifier
Definition
qohoskeymodifiers.h:18
OhosKeyboardModifier::CAPS_LOCK
@ CAPS_LOCK
Definition
qohoskeymodifiers.h:23
qtbase
src
plugins
platforms
ohos
qohoskeyeventconverthelpers.cpp
Generated on
for Qt by
1.18.0