1// Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB).
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 "qkeyboardhandler.h"
5#include "qkeyboardhandler_p.h"
6
7#include <Qt3DInput/qkeyboarddevice.h>
8
9QT_BEGIN_NAMESPACE
10
11using namespace Qt3DCore;
12
13namespace Qt3DInput {
14
15namespace {
16
17
18// SigMap and the sigMap table are taken from QQ2 QQuickKeysAttached
19struct SigMap {
20 int key;
21 const char *sig;
22};
23
24const SigMap sigMap[] = {
25 { .key: Qt::Key_Left, .sig: "leftPressed" },
26 { .key: Qt::Key_Right, .sig: "rightPressed" },
27 { .key: Qt::Key_Up, .sig: "upPressed" },
28 { .key: Qt::Key_Down, .sig: "downPressed" },
29 { .key: Qt::Key_Tab, .sig: "tabPressed" },
30 { .key: Qt::Key_Backtab, .sig: "backtabPressed" },
31 { .key: Qt::Key_Asterisk, .sig: "asteriskPressed" },
32 { .key: Qt::Key_NumberSign, .sig: "numberSignPressed" },
33 { .key: Qt::Key_Escape, .sig: "escapePressed" },
34 { .key: Qt::Key_Return, .sig: "returnPressed" },
35 { .key: Qt::Key_Enter, .sig: "enterPressed" },
36 { .key: Qt::Key_Delete, .sig: "deletePressed" },
37 { .key: Qt::Key_Space, .sig: "spacePressed" },
38 { .key: Qt::Key_Back, .sig: "backPressed" },
39 { .key: Qt::Key_Cancel, .sig: "cancelPressed" },
40 { .key: Qt::Key_Select, .sig: "selectPressed" },
41 { .key: Qt::Key_Yes, .sig: "yesPressed" },
42 { .key: Qt::Key_No, .sig: "noPressed" },
43 { .key: Qt::Key_Context1, .sig: "context1Pressed" },
44 { .key: Qt::Key_Context2, .sig: "context2Pressed" },
45 { .key: Qt::Key_Context3, .sig: "context3Pressed" },
46 { .key: Qt::Key_Context4, .sig: "context4Pressed" },
47 { .key: Qt::Key_Call, .sig: "callPressed" },
48 { .key: Qt::Key_Hangup, .sig: "hangupPressed" },
49 { .key: Qt::Key_Flip, .sig: "flipPressed" },
50 { .key: Qt::Key_Menu, .sig: "menuPressed" },
51 { .key: Qt::Key_VolumeUp, .sig: "volumeUpPressed" },
52 { .key: Qt::Key_VolumeDown, .sig: "volumeDownPressed" },
53 { .key: 0, .sig: 0 }
54};
55
56const QByteArray keyToSignal(int key)
57{
58 QByteArray keySignal;
59 if (key >= Qt::Key_0 && key <= Qt::Key_9) {
60 keySignal = "digit0Pressed";
61 keySignal[5] = '0' + (key - Qt::Key_0);
62 } else {
63 int i = 0;
64 while (sigMap[i].key && sigMap[i].key != key)
65 ++i;
66 keySignal = sigMap[i].sig;
67 }
68 return keySignal;
69}
70
71} // anonymous
72
73QKeyboardHandlerPrivate::QKeyboardHandlerPrivate()
74 : QComponentPrivate()
75 , m_keyboardDevice(nullptr)
76 , m_focus(false)
77{
78 m_shareable = false;
79}
80
81QKeyboardHandlerPrivate::~QKeyboardHandlerPrivate()
82{
83}
84
85void QKeyboardHandlerPrivate::keyEvent(QKeyEvent *event)
86{
87 Q_Q(QKeyboardHandler);
88 if (event->type() == QEvent::KeyPress) {
89 emit q->pressed(event);
90
91 QByteArray keySignal = keyToSignal(key: event->key());
92 if (!keySignal.isEmpty()) {
93 keySignal += "(Qt3DInput::QKeyEvent*)";
94 // TO DO: Finding if the signal is connected to anything before doing the invocation
95 // could be an improvement
96 // That's what QQ2 does but since it accesses QML private classes to do so, that may not be
97 // applicable in our case
98 int idx = QKeyboardHandler::staticMetaObject.indexOfSignal(signal: keySignal);
99 q->metaObject()->method(index: idx).invoke(obj: q, c: Qt::DirectConnection, Q_ARG(QKeyEvent*, event));
100 }
101 } else if (event->type() == QEvent::KeyRelease) {
102 emit q->released(event);
103 }
104}
105
106
107/*!
108 \class Qt3DInput::QKeyboardHandler
109 \inmodule Qt3DInput
110 \brief Provides keyboard event notification.
111 \since 5.5
112*/
113
114/*!
115 \qmltype KeyboardHandler
116 \inqmlmodule Qt3D.Input
117 \instantiates Qt3DInput::QKeyboardHandler
118 \inherits Component3D
119 \brief QML frontend for QKeyboardHandler C++ class.
120 \since 5.5
121*/
122
123/*!
124 Constructs a new QKeyboardHandler instance with parent \a parent.
125 */
126QKeyboardHandler::QKeyboardHandler(QNode *parent)
127 : QComponent(*new QKeyboardHandlerPrivate, parent)
128{
129}
130
131/*! \internal */
132QKeyboardHandler::~QKeyboardHandler()
133{
134}
135
136/*!
137 \qmlproperty KeyboardDevice Qt3D.Input::KeyboardHandler::sourceDevice
138*/
139
140/*!
141 \property Qt3DInput::QKeyboardHandler::sourceDevice
142
143 Holds the keyboard device of the QKeyboardHandler. Without a valid device,
144 the QKeyboardHandler won't receive any event.
145 */
146void QKeyboardHandler::setSourceDevice(QKeyboardDevice *keyboardDevice)
147{
148 Q_D(QKeyboardHandler);
149 if (d->m_keyboardDevice != keyboardDevice) {
150
151 if (d->m_keyboardDevice)
152 d->unregisterDestructionHelper(node: d->m_keyboardDevice);
153
154 if (keyboardDevice && !keyboardDevice->parent())
155 keyboardDevice->setParent(this);
156
157 d->m_keyboardDevice = keyboardDevice;
158
159 // Ensures proper bookkeeping
160 if (d->m_keyboardDevice)
161 d->registerDestructionHelper(node: keyboardDevice, func: &QKeyboardHandler::setSourceDevice, d->m_keyboardDevice);
162
163 emit sourceDeviceChanged(keyboardDevice);
164 }
165}
166
167/*!
168 Returns the current keyboard device.
169 */
170QKeyboardDevice *QKeyboardHandler::sourceDevice() const
171{
172 Q_D(const QKeyboardHandler);
173 return d->m_keyboardDevice;
174}
175
176/*!
177 \qmlproperty bool Qt3D.Input::KeyboardHandler::focus
178*/
179
180/*!
181 \property Qt3DInput::QKeyboardHandler::focus
182
183 Holds \c true if the QKeyboardHandlers has focus.
184 */
185bool QKeyboardHandler::focus() const
186{
187 Q_D(const QKeyboardHandler);
188 return d->m_focus;
189}
190
191/*!
192 Sets the focus to \a focus. If focus is not currently set to \c true,
193 this component will receive keyboard focus.
194 */
195void QKeyboardHandler::setFocus(bool focus)
196{
197 Q_D(QKeyboardHandler);
198 if (d->m_focus != focus) {
199 d->m_focus = focus;
200 emit focusChanged(focus);
201 }
202}
203
204/*!
205 \qmlsignal Qt3D.Input::KeyboardHandler::digit0Pressed(KeyEvent event)
206
207 This signal is emitted when the 0 key is pressed with the event details being contained within \a event.
208*/
209
210/*!
211 \qmlsignal Qt3D.Input::KeyboardHandler::digit1Pressed(KeyEvent event)
212
213 This signal is emitted when the 1 key is pressed with the event details being contained within \a event.
214*/
215
216/*!
217 \qmlsignal Qt3D.Input::KeyboardHandler::digit2Pressed(KeyEvent event)
218
219 This signal is emitted when the 2 key is pressed with the event details being contained within \a event.
220*/
221
222/*!
223 \qmlsignal Qt3D.Input::KeyboardHandler::digit3Pressed(KeyEvent event)
224
225 This signal is emitted when the 3 key is pressed with the event details being contained within \a event.
226*/
227
228/*!
229 \qmlsignal Qt3D.Input::KeyboardHandler::digit4Pressed(KeyEvent event)
230
231 This signal is emitted when the 4 key is pressed with the event details being contained within \a event.
232*/
233
234/*!
235 \qmlsignal Qt3D.Input::KeyboardHandler::digit5Pressed(KeyEvent event)
236
237 This signal is emitted when the 5 key is pressed with the event details being contained within \a event.
238*/
239
240/*!
241 \qmlsignal Qt3D.Input::KeyboardHandler::digit6Pressed(KeyEvent event)
242
243 This signal is emitted when the 6 key is pressed with the event details being contained within \a event.
244*/
245
246/*!
247 \qmlsignal Qt3D.Input::KeyboardHandler::digit7Pressed(KeyEvent event)
248
249 This signal is emitted when the 7 key is pressed with the event details being contained within \a event.
250*/
251
252/*!
253 \qmlsignal Qt3D.Input::KeyboardHandler::digit8Pressed(KeyEvent event)
254
255 This signal is emitted when the 8 key is pressed with the event details being contained within \a event.
256*/
257
258/*!
259 \qmlsignal Qt3D.Input::KeyboardHandler::digit9Pressed(KeyEvent event)
260
261 This signal is emitted when the 9 key is pressed with the event details being contained within \a event.
262*/
263
264/*!
265 \qmlsignal Qt3D.Input::KeyboardHandler::leftPressed(KeyEvent event)
266
267 This signal is emitted when the left key is pressed with the event details being contained within \a event.
268*/
269
270/*!
271 \qmlsignal Qt3D.Input::KeyboardHandler::rightPressed(KeyEvent event)
272
273 This signal is emitted when the right key is pressed with the event details being contained within \a event
274*/
275
276/*!
277 \qmlsignal Qt3D.Input::KeyboardHandler::upPressed(KeyEvent event)
278
279 This signal is emitted when the up key is pressed with the event details being contained within \a event.
280*/
281
282/*!
283 \qmlsignal Qt3D.Input::KeyboardHandler::downPressed(KeyEvent event)
284
285 This signal is emitted when the down key is pressed with the event details being contained within \a event.
286*/
287
288/*!
289 \qmlsignal Qt3D.Input::KeyboardHandler::tabPressed(KeyEvent event)
290
291 This signal is emitted when the tab key is pressed with the event details being contained within \a event.
292*/
293
294/*!
295 \qmlsignal Qt3D.Input::KeyboardHandler::backtabPressed(KeyEvent event)
296
297 This signal is emitted when the backtab key is pressed with the event details being contained within \a event.
298*/
299
300/*!
301 \qmlsignal Qt3D.Input::KeyboardHandler::asteriskPressed(KeyEvent event)
302
303 This signal is emitted when the * key is pressed with the event details being contained within \a event.
304*/
305
306/*!
307 \qmlsignal Qt3D.Input::KeyboardHandler::numberSignPressed(KeyEvent event)
308
309 This signal is emitted when the number sign key is pressed with the event details being contained within \a event.
310*/
311
312/*!
313 \qmlsignal Qt3D.Input::KeyboardHandler::escapePressed(KeyEvent event)
314
315 This signal is emitted when the escape key is pressed with the event details being contained within \a event.
316*/
317
318/*!
319 \qmlsignal Qt3D.Input::KeyboardHandler::returnPressed(KeyEvent event)
320
321 This signal is emitted when the return key is pressed with the event details being contained within \a event.
322
323*/
324
325/*!
326 \qmlsignal Qt3D.Input::KeyboardHandler::enterPressed(KeyEvent event)
327
328 This signal is emitted when the enter key is pressed with the event details being contained within \a event.
329*/
330
331/*!
332 \qmlsignal Qt3D.Input::KeyboardHandler::deletePressed(KeyEvent event)
333
334 This signal is emitted when the delete key is pressed with the event details being contained within \a event.
335*/
336
337/*!
338 \qmlsignal Qt3D.Input::KeyboardHandler::spacePressed(KeyEvent event)
339
340 This signal is emitted when the space key is pressed with the event details being contained within \a event.
341*/
342
343/*!
344 \qmlsignal Qt3D.Input::KeyboardHandler::backPressed(KeyEvent event)
345
346 This signal is emitted when the back key is pressed with the event details being contained within \a event.
347*/
348
349/*!
350 \qmlsignal Qt3D.Input::KeyboardHandler::cancelPressed(KeyEvent event)
351
352 This signal is emitted when the cancel key is pressed with the event details being contained within \a event.
353*/
354
355/*!
356 \qmlsignal Qt3D.Input::KeyboardHandler::selectPressed(KeyEvent event)
357
358 This signal is emitted when the select key is pressed with the event details being contained within \a event.
359*/
360
361/*!
362 \qmlsignal Qt3D.Input::KeyboardHandler::yesPressed(KeyEvent event)
363
364 This signal is emitted when the yes key is pressed with the event details being contained within \a event.
365*/
366
367/*!
368 \qmlsignal Qt3D.Input::KeyboardHandler::noPressed(KeyEvent event)
369
370 This signal is emitted when the yes key is pressed with the event details being contained within \a event.
371*/
372
373/*!
374 \qmlsignal Qt3D.Input::KeyboardHandler::context1Pressed(KeyEvent event)
375
376 This signal is emitted when the context 1 key is pressed with the event details being contained within \a event.
377*/
378
379/*!
380 \qmlsignal Qt3D.Input::KeyboardHandler::context2Pressed(KeyEvent event)
381
382 This signal is emitted when the context 2 key is pressed with the event details being contained within \a event.
383*/
384
385/*!
386 \qmlsignal Qt3D.Input::KeyboardHandler::context3Pressed(KeyEvent event)
387
388 This signal is emitted when the context 2 key is pressed with the event details being contained within \a event.
389*/
390
391/*!
392 \qmlsignal Qt3D.Input::KeyboardHandler::context4Pressed(KeyEvent event)
393
394 This signal is emitted when the context 4 key is pressed with the event details being contained within \a event.
395*/
396
397/*!
398 \qmlsignal Qt3D.Input::KeyboardHandler::callPressed(KeyEvent event)
399
400 This signal is emitted when the call key is pressed with the event details being contained within \a event.
401*/
402
403/*!
404 \qmlsignal Qt3D.Input::KeyboardHandler::hangupPressed(KeyEvent event)
405
406 This signal is emitted when the hangup key is pressed with the event details being contained within \a event.
407*/
408
409/*!
410 \qmlsignal Qt3D.Input::KeyboardHandler::flipPressed(KeyEvent event)
411
412 This signal is emitted when the flip key is pressed with the event details being contained within \a event.
413*/
414
415/*!
416 \qmlsignal Qt3D.Input::KeyboardHandler::menuPressed(KeyEvent event)
417
418 This signal is emitted when the menu key is pressed with the event details being contained within \a event.
419*/
420
421/*!
422 \qmlsignal Qt3D.Input::KeyboardHandler::volumeUpPressed(KeyEvent event)
423
424 This signal is emitted when the volume up key is pressed with the event details being contained within \a event.
425*/
426
427/*!
428 \qmlsignal Qt3D.Input::KeyboardHandler::volumeDownPressed(KeyEvent event)
429
430 This signal is emitted when the volume down key is pressed with the event details being contained within \a event.
431*/
432
433/*!
434 \qmlsignal Qt3D.Input::KeyboardHandler::pressed(KeyEvent event)
435
436 This signal is emitted when a key is pressed with the event details being contained within \a event.
437*/
438
439/*!
440 \qmlsignal Qt3D.Input::KeyboardHandler::released(KeyEvent event)
441
442 This signal is emitted when a key is released with the event details being contained within \a event.
443*/
444
445/*!
446 \fn Qt3DInput::QKeyboardHandler::digit0Pressed(Qt3DInput::QKeyEvent *event)
447
448 This signal is emitted when the 0 key is pressed with the event details being contained within \a event.
449*/
450
451/*!
452 \fn Qt3DInput::QKeyboardHandler::digit1Pressed(Qt3DInput::QKeyEvent *event)
453
454 This signal is emitted when the 1 key is pressed with the event details being contained within \a event.
455*/
456
457/*!
458 \fn Qt3DInput::QKeyboardHandler::digit2Pressed(Qt3DInput::QKeyEvent *event)
459
460 This signal is emitted when the 2 key is pressed with the event details being contained within \a event.
461*/
462
463/*!
464 \fn Qt3DInput::QKeyboardHandler::digit3Pressed(Qt3DInput::QKeyEvent *event)
465
466 This signal is emitted when the 3 key is pressed with the event details being contained within \a event.
467*/
468
469/*!
470 \fn Qt3DInput::QKeyboardHandler::digit4Pressed(Qt3DInput::QKeyEvent *event)
471
472 This signal is emitted when the 4 key is pressed with the event details being contained within \a event.
473*/
474
475/*!
476 \fn Qt3DInput::QKeyboardHandler::digit5Pressed(Qt3DInput::QKeyEvent *event)
477
478 This signal is emitted when the 5 key is pressed with the event details being contained within \a event.
479*/
480
481/*!
482 \fn Qt3DInput::QKeyboardHandler::digit6Pressed(Qt3DInput::QKeyEvent *event)
483
484 This signal is emitted when the 6 key is pressed with the event details being contained within \a event.
485*/
486
487/*!
488 \fn Qt3DInput::QKeyboardHandler::digit7Pressed(Qt3DInput::QKeyEvent *event)
489
490 This signal is emitted when the 7 key is pressed with the event details being contained within \a event.
491*/
492
493/*!
494 \fn Qt3DInput::QKeyboardHandler::digit8Pressed(Qt3DInput::QKeyEvent *event)
495
496 This signal is emitted when the 8 key is pressed with the event details being contained within \a event.
497*/
498
499/*!
500 \fn Qt3DInput::QKeyboardHandler::digit9Pressed(Qt3DInput::QKeyEvent *event)
501
502 This signal is emitted when the 9 key is pressed with the event details being contained within \a event
503*/
504
505/*!
506 \fn Qt3DInput::QKeyboardHandler::leftPressed(Qt3DInput::QKeyEvent *event)
507
508 This signal is emitted when the left key is pressed with the event details being contained within \a event.
509*/
510
511/*!
512 \fn Qt3DInput::QKeyboardHandler::rightPressed(Qt3DInput::QKeyEvent *event)
513
514 This signal is emitted when the right key is pressed with the event details being contained within \a event.
515*/
516
517/*!
518 \fn Qt3DInput::QKeyboardHandler::upPressed(Qt3DInput::QKeyEvent *event)
519
520 This signal is emitted when the up key is pressed with the event details being contained within \a event.
521*/
522
523/*!
524 \fn Qt3DInput::QKeyboardHandler::downPressed(Qt3DInput::QKeyEvent *event)
525
526 This signal is emitted when the down key is pressed with the event details being contained within \a event.
527*/
528
529/*!
530 \fn Qt3DInput::QKeyboardHandler::tabPressed(Qt3DInput::QKeyEvent *event)
531
532 This signal is emitted when the tab key is pressed with the event details being contained within \a event.
533*/
534
535/*!
536 \fn Qt3DInput::QKeyboardHandler::backtabPressed(Qt3DInput::QKeyEvent *event)
537
538 This signal is emitted when the backtab key is pressed with the event details being contained within \a event.
539*/
540
541/*!
542 \fn Qt3DInput::QKeyboardHandler::asteriskPressed(Qt3DInput::QKeyEvent *event)
543
544 This signal is emitted when the * key is pressed with the event details being contained within \a event.
545*/
546
547/*!
548 \fn Qt3DInput::QKeyboardHandler::numberSignPressed(Qt3DInput::QKeyEvent *event)
549
550 This signal is emitted when the number sign key is pressed with the event details being contained within \a event.
551*/
552
553/*!
554 \fn Qt3DInput::QKeyboardHandler::escapePressed(Qt3DInput::QKeyEvent *event)
555
556 This signal is emitted when the escape key is pressed with the event details being contained within \a event.
557*/
558
559/*!
560 \fn Qt3DInput::QKeyboardHandler::returnPressed(Qt3DInput::QKeyEvent *event)
561
562 This signal is emitted when the return key is pressed with the event details being contained within \a event.
563*/
564
565/*!
566 \fn Qt3DInput::QKeyboardHandler::enterPressed(Qt3DInput::QKeyEvent *event)
567
568 This signal is emitted when the enter key is pressed with the event details being contained within \a event.
569
570*/
571
572/*!
573 \fn Qt3DInput::QKeyboardHandler::deletePressed(Qt3DInput::QKeyEvent *event)
574
575 This signal is emitted when the delete key is pressed with the event details being contained within \a event.
576*/
577
578/*!
579 \fn Qt3DInput::QKeyboardHandler::spacePressed(Qt3DInput::QKeyEvent *event)
580
581 This signal is emitted when the space key is pressed with the event details being contained within \a event.
582*/
583
584/*!
585 \fn Qt3DInput::QKeyboardHandler::backPressed(Qt3DInput::QKeyEvent *event)
586
587 This signal is emitted when the back key is pressed with the event details being contained within \a event.
588*/
589
590/*!
591 \fn Qt3DInput::QKeyboardHandler::cancelPressed(Qt3DInput::QKeyEvent *event)
592
593 This signal is emitted when the cancel key is pressed with the event details being contained within \a event.
594*/
595
596/*!
597 \fn Qt3DInput::QKeyboardHandler::selectPressed(Qt3DInput::QKeyEvent *event)
598
599 This signal is emitted when the select key is pressed with the event details being contained within \a event.
600*/
601
602/*!
603 \fn Qt3DInput::QKeyboardHandler::yesPressed(Qt3DInput::QKeyEvent *event)
604
605 This signal is emitted when the yes key is pressed with the event details being contained within \a event.
606*/
607
608/*!
609 \fn Qt3DInput::QKeyboardHandler::noPressed(Qt3DInput::QKeyEvent *event)
610
611 This signal is emitted when the yes key is pressed with the event details being contained within \a event.
612*/
613
614/*!
615 \fn Qt3DInput::QKeyboardHandler::context1Pressed(Qt3DInput::QKeyEvent *event)
616
617 This signal is emitted when the context 1 key is pressed with the event details being contained within \a event.
618*/
619
620/*!
621 \fn Qt3DInput::QKeyboardHandler::context2Pressed(Qt3DInput::QKeyEvent *event)
622
623 This signal is emitted when the context 2 key is pressed with the event details being contained within \a event.
624*/
625
626/*!
627 \fn Qt3DInput::QKeyboardHandler::context3Pressed(Qt3DInput::QKeyEvent *event)
628
629 This signal is emitted when the context 2 key is pressed with the event details being contained within \a event.
630*/
631
632/*!
633 \fn Qt3DInput::QKeyboardHandler::context4Pressed(Qt3DInput::QKeyEvent *event)
634
635 This signal is emitted when the context 4 key is pressed with the event details being contained within \a event.
636*/
637
638/*!
639 \fn Qt3DInput::QKeyboardHandler::callPressed(Qt3DInput::QKeyEvent *event)
640
641 This signal is emitted when the call key is pressed with the event details being contained within \a event.
642*/
643
644/*!
645 \fn Qt3DInput::QKeyboardHandler::hangupPressed(Qt3DInput::QKeyEvent *event)
646
647 This signal is emitted when the hangup key is pressed with the event details being contained within \a event.
648*/
649
650/*!
651 \fn Qt3DInput::QKeyboardHandler::flipPressed(Qt3DInput::QKeyEvent *event)
652
653 This signal is emitted when the flip key is pressed with the event details being contained within \a event.
654*/
655
656/*!
657 \fn Qt3DInput::QKeyboardHandler::menuPressed(Qt3DInput::QKeyEvent *event)
658
659 This signal is emitted when the menu key is pressed with the event details being contained within \a event.
660*/
661
662/*!
663 \fn Qt3DInput::QKeyboardHandler::volumeUpPressed(Qt3DInput::QKeyEvent *event)
664
665 This signal is emitted when the volume up key is pressed with the event details being contained within \a event.
666*/
667
668/*!
669 \fn Qt3DInput::QKeyboardHandler::volumeDownPressed(Qt3DInput::QKeyEvent *event)
670
671 This signal is emitted when the volume down key is pressed with the event details being contained within \a event.
672*/
673
674/*!
675 \fn Qt3DInput::QKeyboardHandler::pressed(Qt3DInput::QKeyEvent *event)
676
677 This signal is emitted when a key is pressed with the event details being contained within \a event.
678*/
679
680/*!
681 \fn Qt3DInput::QKeyboardHandler::released(Qt3DInput::QKeyEvent *event)
682
683 This signal is emitted when a key is released with the event details being contained within \a event.
684*/
685} // namespace Qt3DInput
686
687QT_END_NAMESPACE
688
689#include "moc_qkeyboardhandler.cpp"
690

source code of qt3d/src/input/frontend/qkeyboardhandler.cpp