QtBase  v6.3.1
qkeysequence.cpp
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the QtGui module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 3 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 3 requirements
23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24 **
25 ** GNU General Public License Usage
26 ** Alternatively, this file may be used under the terms of the GNU
27 ** General Public License version 2.0 or (at your option) the GNU General
28 ** Public license version 3 or any later version approved by the KDE Free
29 ** Qt Foundation. The licenses are as published by the Free Software
30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31 ** included in the packaging of this file. Please review the following
32 ** information to ensure the GNU General Public License requirements will
33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34 ** https://www.gnu.org/licenses/gpl-3.0.html.
35 **
36 ** $QT_END_LICENSE$
37 **
38 ****************************************************************************/
39 
40 #include "qkeysequence.h"
41 #include "qkeysequence_p.h"
42 #include <qpa/qplatformtheme.h>
43 #include "private/qguiapplication_p.h"
44 
45 #include "qdebug.h"
46 #include <QtCore/qhashfunctions.h>
47 #ifndef QT_NO_DATASTREAM
48 # include "qdatastream.h"
49 #endif
50 #include "qvariant.h"
51 
52 #if defined(Q_OS_MACOS)
53 #include <QtCore/private/qcore_mac_p.h>
54 #endif
55 
56 #include <algorithm>
57 
59 
60 #if defined(Q_OS_MACOS) || defined(Q_CLANG_QDOC)
61 static bool qt_sequence_no_mnemonics = true;
62 struct MacSpecialKey {
63  int key;
64  ushort macSymbol;
65 };
66 
67 // Unicode code points for the glyphs associated with these keys
68 // Defined by Carbon headers but not anywhere in Cocoa
69 static const int kShiftUnicode = 0x21E7;
70 static const int kControlUnicode = 0x2303;
71 static const int kOptionUnicode = 0x2325;
72 static const int kCommandUnicode = 0x2318;
73 
74 static const int NumEntries = 21;
75 static const MacSpecialKey entries[NumEntries] = {
76  { Qt::Key_Escape, 0x238B },
77  { Qt::Key_Tab, 0x21E5 },
78  { Qt::Key_Backtab, 0x21E4 },
79  { Qt::Key_Backspace, 0x232B },
80  { Qt::Key_Return, 0x21B5 },
81  { Qt::Key_Enter, 0x2324 },
82  { Qt::Key_Delete, 0x2326 },
83  { Qt::Key_Home, 0x2196 },
84  { Qt::Key_End, 0x2198 },
85  { Qt::Key_Left, 0x2190 },
86  { Qt::Key_Up, 0x2191 },
87  { Qt::Key_Right, 0x2192 },
88  { Qt::Key_Down, 0x2193 },
89  { Qt::Key_PageUp, 0x21DE },
90  { Qt::Key_PageDown, 0x21DF },
91  { Qt::Key_Shift, kShiftUnicode },
92  { Qt::Key_Control, kCommandUnicode },
93  { Qt::Key_Meta, kControlUnicode },
94  { Qt::Key_Alt, kOptionUnicode },
95  { Qt::Key_CapsLock, 0x21EA },
96 };
97 
98 static bool operator<(const MacSpecialKey &entry, int key)
99 {
100  return entry.key < key;
101 }
102 
103 static bool operator<(int key, const MacSpecialKey &entry)
104 {
105  return key < entry.key;
106 }
107 
108 
109 QChar qt_macSymbolForQtKey(int key)
110 {
111  const auto i = std::lower_bound(std::begin(entries), std::end(entries), key);
112  if (i == std::end(entries) || key < *i)
113  return QChar();
114  ushort macSymbol = i->macSymbol;
115  if (qApp->testAttribute(Qt::AA_MacDontSwapCtrlAndMeta)
116  && (macSymbol == kControlUnicode || macSymbol == kCommandUnicode)) {
117  if (macSymbol == kControlUnicode)
118  macSymbol = kCommandUnicode;
119  else
120  macSymbol = kControlUnicode;
121  }
122 
123  return QChar(macSymbol);
124 }
125 
126 static int qtkeyForMacSymbol(const QChar ch)
127 {
128  const ushort unicode = ch.unicode();
129  for (const MacSpecialKey &entry : entries) {
130  if (entry.macSymbol == unicode) {
131  int key = entry.key;
132  if (qApp->testAttribute(Qt::AA_MacDontSwapCtrlAndMeta)
133  && (unicode == kControlUnicode || unicode == kCommandUnicode)) {
134  if (unicode == kControlUnicode)
136  else
137  key = Qt::Key_Meta;
138  }
139  return key;
140  }
141  }
142  return -1;
143 }
144 
145 #else
146 static bool qt_sequence_no_mnemonics = false;
147 #endif
148 
165 void Q_GUI_EXPORT qt_set_sequence_auto_mnemonic(bool b) { qt_sequence_no_mnemonics = !b; }
166 
411 static const struct {
412  int key;
413  const char name[25];
414 } keyname[] = {
415  //: This and all following "incomprehensible" strings in QShortcut context
416  //: are key names. Please use the localized names appearing on actual
417  //: keyboards or whatever is commonly used.
418  { Qt::Key_Space, QT_TRANSLATE_NOOP("QShortcut", "Space") },
419  { Qt::Key_Escape, QT_TRANSLATE_NOOP("QShortcut", "Esc") },
420  { Qt::Key_Tab, QT_TRANSLATE_NOOP("QShortcut", "Tab") },
421  { Qt::Key_Backtab, QT_TRANSLATE_NOOP("QShortcut", "Backtab") },
422  { Qt::Key_Backspace, QT_TRANSLATE_NOOP("QShortcut", "Backspace") },
423  { Qt::Key_Return, QT_TRANSLATE_NOOP("QShortcut", "Return") },
424  { Qt::Key_Enter, QT_TRANSLATE_NOOP("QShortcut", "Enter") },
425  { Qt::Key_Insert, QT_TRANSLATE_NOOP("QShortcut", "Ins") },
426  { Qt::Key_Delete, QT_TRANSLATE_NOOP("QShortcut", "Del") },
427  { Qt::Key_Pause, QT_TRANSLATE_NOOP("QShortcut", "Pause") },
428  { Qt::Key_Print, QT_TRANSLATE_NOOP("QShortcut", "Print") },
429  { Qt::Key_SysReq, QT_TRANSLATE_NOOP("QShortcut", "SysReq") },
430  { Qt::Key_Home, QT_TRANSLATE_NOOP("QShortcut", "Home") },
431  { Qt::Key_End, QT_TRANSLATE_NOOP("QShortcut", "End") },
432  { Qt::Key_Left, QT_TRANSLATE_NOOP("QShortcut", "Left") },
433  { Qt::Key_Up, QT_TRANSLATE_NOOP("QShortcut", "Up") },
434  { Qt::Key_Right, QT_TRANSLATE_NOOP("QShortcut", "Right") },
435  { Qt::Key_Down, QT_TRANSLATE_NOOP("QShortcut", "Down") },
436  { Qt::Key_PageUp, QT_TRANSLATE_NOOP("QShortcut", "PgUp") },
437  { Qt::Key_PageDown, QT_TRANSLATE_NOOP("QShortcut", "PgDown") },
438  { Qt::Key_CapsLock, QT_TRANSLATE_NOOP("QShortcut", "CapsLock") },
439  { Qt::Key_NumLock, QT_TRANSLATE_NOOP("QShortcut", "NumLock") },
440  { Qt::Key_ScrollLock, QT_TRANSLATE_NOOP("QShortcut", "ScrollLock") },
441  { Qt::Key_Menu, QT_TRANSLATE_NOOP("QShortcut", "Menu") },
442  { Qt::Key_Help, QT_TRANSLATE_NOOP("QShortcut", "Help") },
443 
444  // Special keys
445  // Includes multimedia, launcher, lan keys ( bluetooth, wireless )
446  // window navigation
447  { Qt::Key_Back, QT_TRANSLATE_NOOP("QShortcut", "Back") },
448  { Qt::Key_Forward, QT_TRANSLATE_NOOP("QShortcut", "Forward") },
449  { Qt::Key_Stop, QT_TRANSLATE_NOOP("QShortcut", "Stop") },
450  { Qt::Key_Refresh, QT_TRANSLATE_NOOP("QShortcut", "Refresh") },
451  { Qt::Key_VolumeDown, QT_TRANSLATE_NOOP("QShortcut", "Volume Down") },
452  { Qt::Key_VolumeMute, QT_TRANSLATE_NOOP("QShortcut", "Volume Mute") },
453  { Qt::Key_VolumeUp, QT_TRANSLATE_NOOP("QShortcut", "Volume Up") },
454  { Qt::Key_BassBoost, QT_TRANSLATE_NOOP("QShortcut", "Bass Boost") },
455  { Qt::Key_BassUp, QT_TRANSLATE_NOOP("QShortcut", "Bass Up") },
456  { Qt::Key_BassDown, QT_TRANSLATE_NOOP("QShortcut", "Bass Down") },
457  { Qt::Key_TrebleUp, QT_TRANSLATE_NOOP("QShortcut", "Treble Up") },
458  { Qt::Key_TrebleDown, QT_TRANSLATE_NOOP("QShortcut", "Treble Down") },
459  { Qt::Key_MediaPlay, QT_TRANSLATE_NOOP("QShortcut", "Media Play") },
460  { Qt::Key_MediaStop, QT_TRANSLATE_NOOP("QShortcut", "Media Stop") },
461  { Qt::Key_MediaPrevious, QT_TRANSLATE_NOOP("QShortcut", "Media Previous") },
462  { Qt::Key_MediaNext, QT_TRANSLATE_NOOP("QShortcut", "Media Next") },
463  { Qt::Key_MediaRecord, QT_TRANSLATE_NOOP("QShortcut", "Media Record") },
464  //: Media player pause button
465  { Qt::Key_MediaPause, QT_TRANSLATE_NOOP("QShortcut", "Media Pause") },
466  //: Media player button to toggle between playing and paused
467  { Qt::Key_MediaTogglePlayPause, QT_TRANSLATE_NOOP("QShortcut", "Toggle Media Play/Pause") },
468  { Qt::Key_HomePage, QT_TRANSLATE_NOOP("QShortcut", "Home Page") },
469  { Qt::Key_Favorites, QT_TRANSLATE_NOOP("QShortcut", "Favorites") },
470  { Qt::Key_Search, QT_TRANSLATE_NOOP("QShortcut", "Search") },
471  { Qt::Key_Standby, QT_TRANSLATE_NOOP("QShortcut", "Standby") },
472  { Qt::Key_OpenUrl, QT_TRANSLATE_NOOP("QShortcut", "Open URL") },
473  { Qt::Key_LaunchMail, QT_TRANSLATE_NOOP("QShortcut", "Launch Mail") },
474  { Qt::Key_LaunchMedia, QT_TRANSLATE_NOOP("QShortcut", "Launch Media") },
475  { Qt::Key_Launch0, QT_TRANSLATE_NOOP("QShortcut", "Launch (0)") },
476  { Qt::Key_Launch1, QT_TRANSLATE_NOOP("QShortcut", "Launch (1)") },
477  { Qt::Key_Launch2, QT_TRANSLATE_NOOP("QShortcut", "Launch (2)") },
478  { Qt::Key_Launch3, QT_TRANSLATE_NOOP("QShortcut", "Launch (3)") },
479  { Qt::Key_Launch4, QT_TRANSLATE_NOOP("QShortcut", "Launch (4)") },
480  { Qt::Key_Launch5, QT_TRANSLATE_NOOP("QShortcut", "Launch (5)") },
481  { Qt::Key_Launch6, QT_TRANSLATE_NOOP("QShortcut", "Launch (6)") },
482  { Qt::Key_Launch7, QT_TRANSLATE_NOOP("QShortcut", "Launch (7)") },
483  { Qt::Key_Launch8, QT_TRANSLATE_NOOP("QShortcut", "Launch (8)") },
484  { Qt::Key_Launch9, QT_TRANSLATE_NOOP("QShortcut", "Launch (9)") },
485  { Qt::Key_LaunchA, QT_TRANSLATE_NOOP("QShortcut", "Launch (A)") },
486  { Qt::Key_LaunchB, QT_TRANSLATE_NOOP("QShortcut", "Launch (B)") },
487  { Qt::Key_LaunchC, QT_TRANSLATE_NOOP("QShortcut", "Launch (C)") },
488  { Qt::Key_LaunchD, QT_TRANSLATE_NOOP("QShortcut", "Launch (D)") },
489  { Qt::Key_LaunchE, QT_TRANSLATE_NOOP("QShortcut", "Launch (E)") },
490  { Qt::Key_LaunchF, QT_TRANSLATE_NOOP("QShortcut", "Launch (F)") },
491  { Qt::Key_LaunchG, QT_TRANSLATE_NOOP("QShortcut", "Launch (G)") },
492  { Qt::Key_LaunchH, QT_TRANSLATE_NOOP("QShortcut", "Launch (H)") },
493  { Qt::Key_MonBrightnessUp, QT_TRANSLATE_NOOP("QShortcut", "Monitor Brightness Up") },
494  { Qt::Key_MonBrightnessDown, QT_TRANSLATE_NOOP("QShortcut", "Monitor Brightness Down") },
495  { Qt::Key_KeyboardLightOnOff, QT_TRANSLATE_NOOP("QShortcut", "Keyboard Light On/Off") },
496  { Qt::Key_KeyboardBrightnessUp, QT_TRANSLATE_NOOP("QShortcut", "Keyboard Brightness Up") },
497  { Qt::Key_KeyboardBrightnessDown, QT_TRANSLATE_NOOP("QShortcut", "Keyboard Brightness Down") },
498  { Qt::Key_PowerOff, QT_TRANSLATE_NOOP("QShortcut", "Power Off") },
499  { Qt::Key_WakeUp, QT_TRANSLATE_NOOP("QShortcut", "Wake Up") },
500  { Qt::Key_Eject, QT_TRANSLATE_NOOP("QShortcut", "Eject") },
501  { Qt::Key_ScreenSaver, QT_TRANSLATE_NOOP("QShortcut", "Screensaver") },
502  { Qt::Key_WWW, QT_TRANSLATE_NOOP("QShortcut", "WWW") },
503  { Qt::Key_Sleep, QT_TRANSLATE_NOOP("QShortcut", "Sleep") },
504  { Qt::Key_LightBulb, QT_TRANSLATE_NOOP("QShortcut", "LightBulb") },
505  { Qt::Key_Shop, QT_TRANSLATE_NOOP("QShortcut", "Shop") },
506  { Qt::Key_History, QT_TRANSLATE_NOOP("QShortcut", "History") },
507  { Qt::Key_AddFavorite, QT_TRANSLATE_NOOP("QShortcut", "Add Favorite") },
508  { Qt::Key_HotLinks, QT_TRANSLATE_NOOP("QShortcut", "Hot Links") },
509  { Qt::Key_BrightnessAdjust, QT_TRANSLATE_NOOP("QShortcut", "Adjust Brightness") },
510  { Qt::Key_Finance, QT_TRANSLATE_NOOP("QShortcut", "Finance") },
511  { Qt::Key_Community, QT_TRANSLATE_NOOP("QShortcut", "Community") },
512  { Qt::Key_AudioRewind, QT_TRANSLATE_NOOP("QShortcut", "Media Rewind") },
513  { Qt::Key_BackForward, QT_TRANSLATE_NOOP("QShortcut", "Back Forward") },
514  { Qt::Key_ApplicationLeft, QT_TRANSLATE_NOOP("QShortcut", "Application Left") },
515  { Qt::Key_ApplicationRight, QT_TRANSLATE_NOOP("QShortcut", "Application Right") },
516  { Qt::Key_Book, QT_TRANSLATE_NOOP("QShortcut", "Book") },
517  { Qt::Key_CD, QT_TRANSLATE_NOOP("QShortcut", "CD") },
518  { Qt::Key_Calculator, QT_TRANSLATE_NOOP("QShortcut", "Calculator") },
519  { Qt::Key_Calendar, QT_TRANSLATE_NOOP("QShortcut", "Calendar") },
520  { Qt::Key_Clear, QT_TRANSLATE_NOOP("QShortcut", "Clear") },
521  { Qt::Key_ClearGrab, QT_TRANSLATE_NOOP("QShortcut", "Clear Grab") },
522  { Qt::Key_Close, QT_TRANSLATE_NOOP("QShortcut", "Close") },
523  { Qt::Key_ContrastAdjust, QT_TRANSLATE_NOOP("QShortcut", "Adjust contrast") },
524  { Qt::Key_Copy, QT_TRANSLATE_NOOP("QShortcut", "Copy") },
525  { Qt::Key_Cut, QT_TRANSLATE_NOOP("QShortcut", "Cut") },
526  { Qt::Key_Display, QT_TRANSLATE_NOOP("QShortcut", "Display") },
527  { Qt::Key_DOS, QT_TRANSLATE_NOOP("QShortcut", "DOS") },
528  { Qt::Key_Documents, QT_TRANSLATE_NOOP("QShortcut", "Documents") },
529  { Qt::Key_Excel, QT_TRANSLATE_NOOP("QShortcut", "Spreadsheet") },
530  { Qt::Key_Explorer, QT_TRANSLATE_NOOP("QShortcut", "Browser") },
531  { Qt::Key_Game, QT_TRANSLATE_NOOP("QShortcut", "Game") },
532  { Qt::Key_Go, QT_TRANSLATE_NOOP("QShortcut", "Go") },
533  { Qt::Key_iTouch, QT_TRANSLATE_NOOP("QShortcut", "iTouch") },
534  { Qt::Key_LogOff, QT_TRANSLATE_NOOP("QShortcut", "Logoff") },
535  { Qt::Key_Market, QT_TRANSLATE_NOOP("QShortcut", "Market") },
536  { Qt::Key_Meeting, QT_TRANSLATE_NOOP("QShortcut", "Meeting") },
537  { Qt::Key_Memo, QT_TRANSLATE_NOOP("QShortcut", "Memo") },
538  { Qt::Key_MenuKB, QT_TRANSLATE_NOOP("QShortcut", "Keyboard Menu") },
539  { Qt::Key_MenuPB, QT_TRANSLATE_NOOP("QShortcut", "Menu PB") },
540  { Qt::Key_MySites, QT_TRANSLATE_NOOP("QShortcut", "My Sites") },
541  { Qt::Key_News, QT_TRANSLATE_NOOP("QShortcut", "News") },
542  { Qt::Key_OfficeHome, QT_TRANSLATE_NOOP("QShortcut", "Home Office") },
543  { Qt::Key_Option, QT_TRANSLATE_NOOP("QShortcut", "Option") },
544  { Qt::Key_Paste, QT_TRANSLATE_NOOP("QShortcut", "Paste") },
545  { Qt::Key_Phone, QT_TRANSLATE_NOOP("QShortcut", "Phone") },
546  { Qt::Key_Reply, QT_TRANSLATE_NOOP("QShortcut", "Reply") },
547  { Qt::Key_Reload, QT_TRANSLATE_NOOP("QShortcut", "Reload") },
548  { Qt::Key_RotateWindows, QT_TRANSLATE_NOOP("QShortcut", "Rotate Windows") },
549  { Qt::Key_RotationPB, QT_TRANSLATE_NOOP("QShortcut", "Rotation PB") },
550  { Qt::Key_RotationKB, QT_TRANSLATE_NOOP("QShortcut", "Rotation KB") },
551  { Qt::Key_Save, QT_TRANSLATE_NOOP("QShortcut", "Save") },
552  { Qt::Key_Send, QT_TRANSLATE_NOOP("QShortcut", "Send") },
553  { Qt::Key_Spell, QT_TRANSLATE_NOOP("QShortcut", "Spellchecker") },
554  { Qt::Key_SplitScreen, QT_TRANSLATE_NOOP("QShortcut", "Split Screen") },
555  { Qt::Key_Support, QT_TRANSLATE_NOOP("QShortcut", "Support") },
556  { Qt::Key_TaskPane, QT_TRANSLATE_NOOP("QShortcut", "Task Panel") },
557  { Qt::Key_Terminal, QT_TRANSLATE_NOOP("QShortcut", "Terminal") },
558  { Qt::Key_ToDoList, QT_TRANSLATE_NOOP("QShortcut", "To-do list") },
559  { Qt::Key_Tools, QT_TRANSLATE_NOOP("QShortcut", "Tools") },
560  { Qt::Key_Travel, QT_TRANSLATE_NOOP("QShortcut", "Travel") },
561  { Qt::Key_Video, QT_TRANSLATE_NOOP("QShortcut", "Video") },
562  { Qt::Key_Word, QT_TRANSLATE_NOOP("QShortcut", "Word Processor") },
563  { Qt::Key_Xfer, QT_TRANSLATE_NOOP("QShortcut", "XFer") },
564  { Qt::Key_ZoomIn, QT_TRANSLATE_NOOP("QShortcut", "Zoom In") },
565  { Qt::Key_ZoomOut, QT_TRANSLATE_NOOP("QShortcut", "Zoom Out") },
566  { Qt::Key_Away, QT_TRANSLATE_NOOP("QShortcut", "Away") },
567  { Qt::Key_Messenger, QT_TRANSLATE_NOOP("QShortcut", "Messenger") },
568  { Qt::Key_WebCam, QT_TRANSLATE_NOOP("QShortcut", "WebCam") },
569  { Qt::Key_MailForward, QT_TRANSLATE_NOOP("QShortcut", "Mail Forward") },
570  { Qt::Key_Pictures, QT_TRANSLATE_NOOP("QShortcut", "Pictures") },
571  { Qt::Key_Music, QT_TRANSLATE_NOOP("QShortcut", "Music") },
572  { Qt::Key_Battery, QT_TRANSLATE_NOOP("QShortcut", "Battery") },
573  { Qt::Key_Bluetooth, QT_TRANSLATE_NOOP("QShortcut", "Bluetooth") },
574  { Qt::Key_WLAN, QT_TRANSLATE_NOOP("QShortcut", "Wireless") },
575  { Qt::Key_UWB, QT_TRANSLATE_NOOP("QShortcut", "Ultra Wide Band") },
576  { Qt::Key_AudioForward, QT_TRANSLATE_NOOP("QShortcut", "Media Fast Forward") },
577  { Qt::Key_AudioRepeat, QT_TRANSLATE_NOOP("QShortcut", "Audio Repeat") },
578  { Qt::Key_AudioRandomPlay, QT_TRANSLATE_NOOP("QShortcut", "Audio Random Play") },
579  { Qt::Key_Subtitle, QT_TRANSLATE_NOOP("QShortcut", "Subtitle") },
580  { Qt::Key_AudioCycleTrack, QT_TRANSLATE_NOOP("QShortcut", "Audio Cycle Track") },
581  { Qt::Key_Time, QT_TRANSLATE_NOOP("QShortcut", "Time") },
582  { Qt::Key_Hibernate, QT_TRANSLATE_NOOP("QShortcut", "Hibernate") },
583  { Qt::Key_View, QT_TRANSLATE_NOOP("QShortcut", "View") },
584  { Qt::Key_TopMenu, QT_TRANSLATE_NOOP("QShortcut", "Top Menu") },
585  { Qt::Key_PowerDown, QT_TRANSLATE_NOOP("QShortcut", "Power Down") },
586  { Qt::Key_Suspend, QT_TRANSLATE_NOOP("QShortcut", "Suspend") },
587 
588  { Qt::Key_MicMute, QT_TRANSLATE_NOOP("QShortcut", "Microphone Mute") },
589 
590  { Qt::Key_Red, QT_TRANSLATE_NOOP("QShortcut", "Red") },
591  { Qt::Key_Green, QT_TRANSLATE_NOOP("QShortcut", "Green") },
592  { Qt::Key_Yellow, QT_TRANSLATE_NOOP("QShortcut", "Yellow") },
593  { Qt::Key_Blue, QT_TRANSLATE_NOOP("QShortcut", "Blue") },
594 
595  { Qt::Key_ChannelUp, QT_TRANSLATE_NOOP("QShortcut", "Channel Up") },
596  { Qt::Key_ChannelDown, QT_TRANSLATE_NOOP("QShortcut", "Channel Down") },
597 
598  { Qt::Key_Guide, QT_TRANSLATE_NOOP("QShortcut", "Guide") },
599  { Qt::Key_Info, QT_TRANSLATE_NOOP("QShortcut", "Info") },
600  { Qt::Key_Settings, QT_TRANSLATE_NOOP("QShortcut", "Settings") },
601 
602  { Qt::Key_MicVolumeUp, QT_TRANSLATE_NOOP("QShortcut", "Microphone Volume Up") },
603  { Qt::Key_MicVolumeDown, QT_TRANSLATE_NOOP("QShortcut", "Microphone Volume Down") },
604 
605  { Qt::Key_New, QT_TRANSLATE_NOOP("QShortcut", "New") },
606  { Qt::Key_Open, QT_TRANSLATE_NOOP("QShortcut", "Open") },
607  { Qt::Key_Find, QT_TRANSLATE_NOOP("QShortcut", "Find") },
608  { Qt::Key_Undo, QT_TRANSLATE_NOOP("QShortcut", "Undo") },
609  { Qt::Key_Redo, QT_TRANSLATE_NOOP("QShortcut", "Redo") },
610 
611  // --------------------------------------------------------------
612  // More consistent namings
613  { Qt::Key_Print, QT_TRANSLATE_NOOP("QShortcut", "Print Screen") },
614  { Qt::Key_PageUp, QT_TRANSLATE_NOOP("QShortcut", "Page Up") },
615  { Qt::Key_PageDown, QT_TRANSLATE_NOOP("QShortcut", "Page Down") },
616  { Qt::Key_CapsLock, QT_TRANSLATE_NOOP("QShortcut", "Caps Lock") },
617  { Qt::Key_NumLock, QT_TRANSLATE_NOOP("QShortcut", "Num Lock") },
618  { Qt::Key_NumLock, QT_TRANSLATE_NOOP("QShortcut", "Number Lock") },
619  { Qt::Key_ScrollLock, QT_TRANSLATE_NOOP("QShortcut", "Scroll Lock") },
620  { Qt::Key_Insert, QT_TRANSLATE_NOOP("QShortcut", "Insert") },
621  { Qt::Key_Delete, QT_TRANSLATE_NOOP("QShortcut", "Delete") },
622  { Qt::Key_Escape, QT_TRANSLATE_NOOP("QShortcut", "Escape") },
623  { Qt::Key_SysReq, QT_TRANSLATE_NOOP("QShortcut", "System Request") },
624 
625  // --------------------------------------------------------------
626  // Keypad navigation keys
627  { Qt::Key_Select, QT_TRANSLATE_NOOP("QShortcut", "Select") },
628  { Qt::Key_Yes, QT_TRANSLATE_NOOP("QShortcut", "Yes") },
629  { Qt::Key_No, QT_TRANSLATE_NOOP("QShortcut", "No") },
630 
631  // --------------------------------------------------------------
632  // Device keys
633  { Qt::Key_Context1, QT_TRANSLATE_NOOP("QShortcut", "Context1") },
634  { Qt::Key_Context2, QT_TRANSLATE_NOOP("QShortcut", "Context2") },
635  { Qt::Key_Context3, QT_TRANSLATE_NOOP("QShortcut", "Context3") },
636  { Qt::Key_Context4, QT_TRANSLATE_NOOP("QShortcut", "Context4") },
637  //: Button to start a call (note: a separate button is used to end the call)
638  { Qt::Key_Call, QT_TRANSLATE_NOOP("QShortcut", "Call") },
639  //: Button to end a call (note: a separate button is used to start the call)
640  { Qt::Key_Hangup, QT_TRANSLATE_NOOP("QShortcut", "Hangup") },
641  //: Button that will hang up if we're in call, or make a call if we're not.
642  { Qt::Key_ToggleCallHangup, QT_TRANSLATE_NOOP("QShortcut", "Toggle Call/Hangup") },
643  { Qt::Key_Flip, QT_TRANSLATE_NOOP("QShortcut", "Flip") },
644  //: Button to trigger voice dialing
645  { Qt::Key_VoiceDial, QT_TRANSLATE_NOOP("QShortcut", "Voice Dial") },
646  //: Button to redial the last number called
647  { Qt::Key_LastNumberRedial, QT_TRANSLATE_NOOP("QShortcut", "Last Number Redial") },
648  //: Button to trigger the camera shutter (take a picture)
649  { Qt::Key_Camera, QT_TRANSLATE_NOOP("QShortcut", "Camera Shutter") },
650  //: Button to focus the camera
651  { Qt::Key_CameraFocus, QT_TRANSLATE_NOOP("QShortcut", "Camera Focus") },
652 
653  // --------------------------------------------------------------
654  // Japanese keyboard support
655  { Qt::Key_Kanji, QT_TRANSLATE_NOOP("QShortcut", "Kanji") },
656  { Qt::Key_Muhenkan, QT_TRANSLATE_NOOP("QShortcut", "Muhenkan") },
657  { Qt::Key_Henkan, QT_TRANSLATE_NOOP("QShortcut", "Henkan") },
658  { Qt::Key_Romaji, QT_TRANSLATE_NOOP("QShortcut", "Romaji") },
659  { Qt::Key_Hiragana, QT_TRANSLATE_NOOP("QShortcut", "Hiragana") },
660  { Qt::Key_Katakana, QT_TRANSLATE_NOOP("QShortcut", "Katakana") },
661  { Qt::Key_Hiragana_Katakana,QT_TRANSLATE_NOOP("QShortcut", "Hiragana Katakana") },
662  { Qt::Key_Zenkaku, QT_TRANSLATE_NOOP("QShortcut", "Zenkaku") },
663  { Qt::Key_Hankaku, QT_TRANSLATE_NOOP("QShortcut", "Hankaku") },
664  { Qt::Key_Zenkaku_Hankaku, QT_TRANSLATE_NOOP("QShortcut", "Zenkaku Hankaku") },
665  { Qt::Key_Touroku, QT_TRANSLATE_NOOP("QShortcut", "Touroku") },
666  { Qt::Key_Massyo, QT_TRANSLATE_NOOP("QShortcut", "Massyo") },
667  { Qt::Key_Kana_Lock, QT_TRANSLATE_NOOP("QShortcut", "Kana Lock") },
668  { Qt::Key_Kana_Shift, QT_TRANSLATE_NOOP("QShortcut", "Kana Shift") },
669  { Qt::Key_Eisu_Shift, QT_TRANSLATE_NOOP("QShortcut", "Eisu Shift") },
670  { Qt::Key_Eisu_toggle, QT_TRANSLATE_NOOP("QShortcut", "Eisu toggle") },
671  { Qt::Key_Codeinput, QT_TRANSLATE_NOOP("QShortcut", "Code input") },
672  { Qt::Key_MultipleCandidate,QT_TRANSLATE_NOOP("QShortcut", "Multiple Candidate") },
673  { Qt::Key_PreviousCandidate,QT_TRANSLATE_NOOP("QShortcut", "Previous Candidate") },
674 
675  // --------------------------------------------------------------
676  // Korean keyboard support
677  { Qt::Key_Hangul, QT_TRANSLATE_NOOP("QShortcut", "Hangul") },
678  { Qt::Key_Hangul_Start, QT_TRANSLATE_NOOP("QShortcut", "Hangul Start") },
679  { Qt::Key_Hangul_End, QT_TRANSLATE_NOOP("QShortcut", "Hangul End") },
680  { Qt::Key_Hangul_Hanja, QT_TRANSLATE_NOOP("QShortcut", "Hangul Hanja") },
681  { Qt::Key_Hangul_Jamo, QT_TRANSLATE_NOOP("QShortcut", "Hangul Jamo") },
682  { Qt::Key_Hangul_Romaja, QT_TRANSLATE_NOOP("QShortcut", "Hangul Romaja") },
683  { Qt::Key_Hangul_Jeonja, QT_TRANSLATE_NOOP("QShortcut", "Hangul Jeonja") },
684  { Qt::Key_Hangul_Banja, QT_TRANSLATE_NOOP("QShortcut", "Hangul Banja") },
685  { Qt::Key_Hangul_PreHanja, QT_TRANSLATE_NOOP("QShortcut", "Hangul PreHanja") },
686  { Qt::Key_Hangul_PostHanja,QT_TRANSLATE_NOOP("QShortcut", "Hangul PostHanja") },
687  { Qt::Key_Hangul_Special, QT_TRANSLATE_NOOP("QShortcut", "Hangul Special") },
688 
689  // --------------------------------------------------------------
690  // Miscellaneous keys
691  { Qt::Key_Cancel, QT_TRANSLATE_NOOP("QShortcut", "Cancel") },
692  { Qt::Key_Printer, QT_TRANSLATE_NOOP("QShortcut", "Printer") },
693  { Qt::Key_Execute, QT_TRANSLATE_NOOP("QShortcut", "Execute") },
694  { Qt::Key_Play, QT_TRANSLATE_NOOP("QShortcut", "Play") },
695  { Qt::Key_Zoom, QT_TRANSLATE_NOOP("QShortcut", "Zoom") },
696  { Qt::Key_Exit, QT_TRANSLATE_NOOP("QShortcut", "Exit") },
697  { Qt::Key_TouchpadToggle, QT_TRANSLATE_NOOP("QShortcut", "Touchpad Toggle") },
698  { Qt::Key_TouchpadOn, QT_TRANSLATE_NOOP("QShortcut", "Touchpad On") },
699  { Qt::Key_TouchpadOff, QT_TRANSLATE_NOOP("QShortcut", "Touchpad Off") },
700 
701 };
702 static constexpr int numKeyNames = sizeof keyname / sizeof *keyname;
703 
805 {
807  //pick only the first/primary shortcut from current bindings
808  if (bindings.size() > 0) {
809  d = bindings.first().d;
810  d->ref.ref();
811  }
812  else
813  d = new QKeySequencePrivate();
814 }
815 
816 
821 {
822  static QKeySequencePrivate shared_empty;
823  d = &shared_empty;
824  d->ref.ref();
825 }
826 
847 {
848  d = new QKeySequencePrivate();
849  assign(key, format);
850 }
851 
852 static_assert(QKeySequencePrivate::MaxKeyCount == 4, "Change docs and ctor impl below");
861 QKeySequence::QKeySequence(int k1, int k2, int k3, int k4)
862 {
863  d = new QKeySequencePrivate();
864  d->key[0] = k1;
865  d->key[1] = k2;
866  d->key[2] = k3;
867  d->key[3] = k4;
868 }
869 
877  : QKeySequence(k1.toCombined(), k2.toCombined(), k3.toCombined(), k4.toCombined())
878 {
879 }
880 
885  : d(keysequence.d)
886 {
887  d->ref.ref();
888 }
889 
900 {
901  return QGuiApplicationPrivate::platformTheme()->keyBindings(key);
902 }
903 
908 {
909  if (!d->ref.deref())
910  delete d;
911 }
912 
920 void QKeySequence::setKey(QKeyCombination key, int index)
921 {
922  Q_ASSERT_X(index >= 0 && index < QKeySequencePrivate::MaxKeyCount, "QKeySequence::setKey", "index out of range");
923  qAtomicDetach(d);
924  d->key[index] = key.toCombined();
925 }
926 
927 static_assert(QKeySequencePrivate::MaxKeyCount == 4, "Change docs below");
933 {
934  return int(std::distance(d->key, std::find(d->key, d->key + QKeySequencePrivate::MaxKeyCount, 0)));
935 }
936 
937 
943 {
944  return !d->key[0];
945 }
946 
947 
962 {
964 
965  if (qt_sequence_no_mnemonics)
966  return ret;
967 
968  bool found = false;
969  int p = 0;
970  while (p >= 0) {
971  p = text.indexOf(QLatin1Char('&'), p) + 1;
972  if (p <= 0 || p >= (int)text.length())
973  break;
974  if (text.at(p) != QLatin1Char('&')) {
975  QChar c = text.at(p);
976  if (c.isPrint()) {
977  if (!found) {
978  c = c.toUpper();
980 #ifdef QT_NO_DEBUG
981  return ret;
982 #else
983  found = true;
984  } else {
985  qWarning("QKeySequence::mnemonic: \"%s\" contains multiple occurrences of '&'", qPrintable(text));
986 #endif
987  }
988  }
989  }
990  p++;
991  }
992  return ret;
993 }
994 
1004 int QKeySequence::assign(const QString &ks)
1005 {
1006  return assign(ks, NativeText);
1007 }
1008 
1018 int QKeySequence::assign(const QString &ks, QKeySequence::SequenceFormat format)
1019 {
1020  QString keyseq = ks;
1021  int n = 0;
1022  int p = 0, diff = 0;
1023 
1024  // Run through the whole string, but stop
1025  // if we have MaxKeyCount keys before the end.
1026  while (keyseq.length() && n < QKeySequencePrivate::MaxKeyCount) {
1027  // We MUST use something to separate each sequence, and space
1028  // does not cut it, since some of the key names have space
1029  // in them.. (Let's hope no one translate with a comma in it:)
1030  p = keyseq.indexOf(QLatin1Char(','));
1031  if (-1 != p) {
1032  if (p == keyseq.count() - 1) { // Last comma 'Ctrl+,'
1033  p = -1;
1034  } else {
1035  if (QLatin1Char(',') == keyseq.at(p+1)) // e.g. 'Ctrl+,, Shift+,,'
1036  p++;
1037  if (QLatin1Char(' ') == keyseq.at(p+1)) { // Space after comma
1038  diff = 1;
1039  p++;
1040  } else {
1041  diff = 0;
1042  }
1043  }
1044  }
1045  QString part = keyseq.left(-1 == p ? keyseq.length() : p - diff);
1046  keyseq = keyseq.right(-1 == p ? 0 : keyseq.length() - (p + 1));
1047  d->key[n] = QKeySequencePrivate::decodeString(std::move(part), format);
1048  ++n;
1049  }
1050  return n;
1051 }
1052 
1055  QModifKeyName(int q, QChar n) : qt_key(q), name(n) { }
1056  QModifKeyName(int q, const QString &n) : qt_key(q), name(n) { }
1057  int qt_key;
1059 };
1061 
1063 Q_GLOBAL_STATIC(QList<QModifKeyName>, globalPortableModifs)
1064 
1065 
1068 int QKeySequence::decodeString(const QString &str)
1069 {
1071 }
1072 
1074 {
1075  Q_ASSERT(!accel.isEmpty());
1076 
1077  int ret = 0;
1078  accel = std::move(accel).toLower();
1079  bool nativeText = (format == QKeySequence::NativeText);
1080 
1081  QList<QModifKeyName> *gmodifs;
1082  if (nativeText) {
1083  gmodifs = globalModifs();
1084  if (gmodifs->isEmpty()) {
1085 #if defined(Q_OS_MACOS)
1086  const bool dontSwap = qApp->testAttribute(Qt::AA_MacDontSwapCtrlAndMeta);
1087  if (dontSwap)
1088  *gmodifs << QModifKeyName(Qt::META, QChar(kCommandUnicode));
1089  else
1090  *gmodifs << QModifKeyName(Qt::CTRL, QChar(kCommandUnicode));
1091  *gmodifs << QModifKeyName(Qt::ALT, QChar(kOptionUnicode));
1092  if (dontSwap)
1093  *gmodifs << QModifKeyName(Qt::CTRL, QChar(kControlUnicode));
1094  else
1095  *gmodifs << QModifKeyName(Qt::META, QChar(kControlUnicode));
1096  *gmodifs << QModifKeyName(Qt::SHIFT, QChar(kShiftUnicode));
1097 #endif
1098  *gmodifs << QModifKeyName(Qt::CTRL, QLatin1String("ctrl+"))
1099  << QModifKeyName(Qt::SHIFT, QLatin1String("shift+"))
1100  << QModifKeyName(Qt::ALT, QLatin1String("alt+"))
1101  << QModifKeyName(Qt::META, QLatin1String("meta+"))
1103  }
1104  } else {
1105  gmodifs = globalPortableModifs();
1106  if (gmodifs->isEmpty()) {
1107  *gmodifs << QModifKeyName(Qt::CTRL, QLatin1String("ctrl+"))
1108  << QModifKeyName(Qt::SHIFT, QLatin1String("shift+"))
1109  << QModifKeyName(Qt::ALT, QLatin1String("alt+"))
1110  << QModifKeyName(Qt::META, QLatin1String("meta+"))
1112  }
1113  }
1114 
1115 
1116  QList<QModifKeyName> modifs;
1117  if (nativeText) {
1118  modifs << QModifKeyName(Qt::CTRL, QCoreApplication::translate("QShortcut", "Ctrl").toLower().append(QLatin1Char('+')))
1123  }
1124  modifs += *gmodifs; // Test non-translated ones last
1125 
1126  QString sl = accel;
1127 #if defined(Q_OS_MACOS)
1128  for (int i = 0; i < modifs.size(); ++i) {
1129  const QModifKeyName &mkf = modifs.at(i);
1130  if (sl.contains(mkf.name)) {
1131  ret |= mkf.qt_key;
1132  accel.remove(mkf.name);
1133  sl = accel;
1134  }
1135  }
1136  if (accel.isEmpty()) // Incomplete, like for "Meta+Shift+"
1137  return Qt::Key_unknown;
1138 #endif
1139 
1140  int i = 0;
1141  int lastI = 0;
1142  while ((i = sl.indexOf(QLatin1Char('+'), i + 1)) != -1) {
1143  const QStringView sub = QStringView{sl}.mid(lastI, i - lastI + 1);
1144  // If we get here the shortcuts contains at least one '+'. We break up
1145  // along the following strategy:
1146  // Meta+Ctrl++ ( "Meta+", "Ctrl+", "+" )
1147  // Super+Shift+A ( "Super+", "Shift+" )
1148  // 4+3+2=1 ( "4+", "3+" )
1149  // In other words, everything we try to handle HAS to be a modifier
1150  // except for a single '+' at the end of the string.
1151 
1152  // Only '+' can have length 1.
1153  if (sub.length() == 1) {
1154  // Make sure we only encounter a single '+' at the end of the accel
1155  if (accel.lastIndexOf(QLatin1Char('+')) != accel.length()-1)
1156  return Qt::Key_unknown;
1157  } else {
1158  // Identify the modifier
1159  bool validModifier = false;
1160  for (int j = 0; j < modifs.size(); ++j) {
1161  const QModifKeyName &mkf = modifs.at(j);
1162  if (sub == mkf.name) {
1163  ret |= mkf.qt_key;
1164  validModifier = true;
1165  break; // Shortcut, since if we find an other it would/should just be a dup
1166  }
1167  }
1168 
1169  if (!validModifier)
1170  return Qt::Key_unknown;
1171  }
1172  lastI = i + 1;
1173  }
1174 
1175  int p = accel.lastIndexOf(QLatin1Char('+'), accel.length() - 2); // -2 so that Ctrl++ works
1176  QStringView accelRef(accel);
1177  if (p > 0)
1178  accelRef = accelRef.mid(p + 1);
1179 
1180  int fnum = 0;
1181  if (accelRef.length() == 1) {
1182 #if defined(Q_OS_MACOS)
1183  int qtKey = qtkeyForMacSymbol(accelRef.at(0));
1184  if (qtKey != -1) {
1185  ret |= qtKey;
1186  } else
1187 #endif
1188  {
1189  ret |= accelRef.at(0).toUpper().unicode();
1190  }
1191  } else if (accelRef.at(0) == QLatin1Char('f') && (fnum = accelRef.mid(1).toInt()) >= 1 && fnum <= 35) {
1192  ret |= Qt::Key_F1 + fnum - 1;
1193  } else {
1194  // For NativeText, check the translation table first,
1195  // if we don't find anything then try it out with just the untranlated stuff.
1196  // PortableText will only try the untranlated table.
1197  bool found = false;
1198  for (int tran = 0; tran < 2; ++tran) {
1199  if (!nativeText)
1200  ++tran;
1201  for (int i = 0; i < numKeyNames; ++i) {
1202  QString keyName(tran == 0
1203  ? QCoreApplication::translate("QShortcut", keyname[i].name)
1204  : QString::fromLatin1(keyname[i].name));
1205  if (accelRef == std::move(keyName).toLower()) {
1206  ret |= keyname[i].key;
1207  found = true;
1208  break;
1209  }
1210  }
1211  if (found)
1212  break;
1213  }
1214  // We couldn't translate the key.
1215  if (!found)
1216  return Qt::Key_unknown;
1217  }
1218  return ret;
1219 }
1220 
1226 QString QKeySequence::encodeString(int key)
1227 {
1229 }
1230 
1231 static inline void addKey(QString &str, const QString &theKey, QKeySequence::SequenceFormat format)
1232 {
1233  if (!str.isEmpty()) {
1235  //: Key separator in shortcut string
1236  str += QCoreApplication::translate("QShortcut", "+");
1237  } else {
1238  str += QLatin1Char('+');
1239  }
1240  }
1241 
1242  str += theKey;
1243 }
1244 
1246 {
1247  bool nativeText = (format == QKeySequence::NativeText);
1248  QString s;
1249 
1250  // Handle -1 (Invalid Key) and Qt::Key_unknown gracefully
1251  if (key == -1 || key == Qt::Key_unknown)
1252  return s;
1253 
1254 #if defined(Q_OS_MACOS)
1255  if (nativeText) {
1256  // On OS X the order (by default) is Meta, Alt, Shift, Control.
1257  // If the AA_MacDontSwapCtrlAndMeta is enabled, then the order
1258  // is Ctrl, Alt, Shift, Meta. The macSymbolForQtKey does this swap
1259  // for us, which means that we have to adjust our order here.
1260  // The upshot is a lot more infrastructure to keep the number of
1261  // if tests down and the code relatively clean.
1262  static const int ModifierOrder[] = { Qt::META, Qt::ALT, Qt::SHIFT, Qt::CTRL, 0 };
1263  static const int QtKeyOrder[] = { Qt::Key_Meta, Qt::Key_Alt, Qt::Key_Shift, Qt::Key_Control, 0 };
1264  static const int DontSwapModifierOrder[] = { Qt::CTRL, Qt::ALT, Qt::SHIFT, Qt::META, 0 };
1265  static const int DontSwapQtKeyOrder[] = { Qt::Key_Control, Qt::Key_Alt, Qt::Key_Shift, Qt::Key_Meta, 0 };
1266  const int *modifierOrder;
1267  const int *qtkeyOrder;
1268  if (qApp->testAttribute(Qt::AA_MacDontSwapCtrlAndMeta)) {
1269  modifierOrder = DontSwapModifierOrder;
1270  qtkeyOrder = DontSwapQtKeyOrder;
1271  } else {
1272  modifierOrder = ModifierOrder;
1273  qtkeyOrder = QtKeyOrder;
1274  }
1275 
1276  for (int i = 0; modifierOrder[i] != 0; ++i) {
1277  if (key & modifierOrder[i])
1278  s += qt_macSymbolForQtKey(qtkeyOrder[i]);
1279  }
1280  } else
1281 #endif
1282  {
1283  // On other systems the order is Meta, Control, Alt, Shift
1284  if ((key & Qt::META) == Qt::META)
1285  s = nativeText ? QCoreApplication::translate("QShortcut", "Meta") : QString::fromLatin1("Meta");
1286  if ((key & Qt::CTRL) == Qt::CTRL)
1287  addKey(s, nativeText ? QCoreApplication::translate("QShortcut", "Ctrl") : QString::fromLatin1("Ctrl"), format);
1288  if ((key & Qt::ALT) == Qt::ALT)
1289  addKey(s, nativeText ? QCoreApplication::translate("QShortcut", "Alt") : QString::fromLatin1("Alt"), format);
1290  if ((key & Qt::SHIFT) == Qt::SHIFT)
1291  addKey(s, nativeText ? QCoreApplication::translate("QShortcut", "Shift") : QString::fromLatin1("Shift"), format);
1292  }
1294  addKey(s, nativeText ? QCoreApplication::translate("QShortcut", "Num") : QString::fromLatin1("Num"), format);
1295 
1296  QString p = keyName(key, format);
1297 
1298 #if defined(Q_OS_MACOS)
1299  if (nativeText)
1300  s += p;
1301  else
1302 #endif
1303  addKey(s, p, format);
1304  return s;
1305 }
1306 
1316 {
1317  bool nativeText = (format == QKeySequence::NativeText);
1319  QString p;
1320 
1321  if (key && key < Qt::Key_Escape && key != Qt::Key_Space) {
1324  } else {
1327  }
1328  } else if (key >= Qt::Key_F1 && key <= Qt::Key_F35) {
1329  p = nativeText ? QCoreApplication::translate("QShortcut", "F%1").arg(key - Qt::Key_F1 + 1)
1330  : QString::fromLatin1("F%1").arg(key - Qt::Key_F1 + 1);
1331  } else if (key) {
1332  int i=0;
1333 #if defined(Q_OS_MACOS)
1334  if (nativeText) {
1335  QChar ch = qt_macSymbolForQtKey(key);
1336  if (!ch.isNull())
1337  p = ch;
1338  else
1339  goto NonSymbol;
1340  } else
1341 #endif
1342  {
1343 #if defined(Q_OS_MACOS)
1344 NonSymbol:
1345 #endif
1346  while (i < numKeyNames) {
1347  if (key == keyname[i].key) {
1348  p = nativeText ? QCoreApplication::translate("QShortcut", keyname[i].name)
1349  : QString::fromLatin1(keyname[i].name);
1350  break;
1351  }
1352  ++i;
1353  }
1354  // If we can't find the actual translatable keyname,
1355  // fall back on the unicode representation of it...
1356  // Or else characters like Qt::Key_aring may not get displayed
1357  // (Really depends on you locale)
1358  if (i >= numKeyNames) {
1361  } else {
1364  }
1365  }
1366  }
1367  }
1368  return p;
1369 }
1377 {
1378  uint userN = count(),
1379  seqN = seq.count();
1380 
1381  if (userN > seqN)
1382  return NoMatch;
1383 
1384  // If equal in length, we have a potential ExactMatch sequence,
1385  // else we already know it can only be partial.
1386  SequenceMatch match = (userN == seqN ? ExactMatch : PartialMatch);
1387 
1388  for (uint i = 0; i < userN; ++i) {
1389  QKeyCombination userKey = (*this)[i],
1390  sequenceKey = seq[i];
1391  if (userKey != sequenceKey)
1392  return NoMatch;
1393  }
1394  return match;
1395 }
1396 
1400 QKeySequence::operator QVariant() const
1401 {
1402  return QVariant::fromValue(*this);
1403 }
1404 
1410 {
1411  Q_ASSERT_X(index < QKeySequencePrivate::MaxKeyCount, "QKeySequence::operator[]", "index out of range");
1413 }
1414 
1415 
1421 {
1422  qAtomicAssign(d, other.d);
1423  return *this;
1424 }
1425 
1447 {
1448  return (d->key[0] == other.d->key[0] &&
1449  d->key[1] == other.d->key[1] &&
1450  d->key[2] == other.d->key[2] &&
1451  d->key[3] == other.d->key[3]);
1452 }
1453 
1460 size_t qHash(const QKeySequence &key, size_t seed) noexcept
1461 {
1462  return qHashRange(key.d->key, key.d->key + QKeySequencePrivate::MaxKeyCount, seed);
1463 }
1464 
1478 {
1479  return std::lexicographical_compare(d->key, d->key + QKeySequencePrivate::MaxKeyCount,
1480  other.d->key, other.d->key + QKeySequencePrivate::MaxKeyCount);
1481 }
1482 
1514 {
1515  return d->ref.loadRelaxed() == 1;
1516 }
1517 
1540 {
1541  QString finalString;
1542  // A standard string, with no translation or anything like that. In some ways it will
1543  // look like our latin case on Windows and X11
1544  int end = count();
1545  for (int i = 0; i < end; ++i) {
1546  finalString += d->encodeString(d->key[i], format);
1547  finalString += QLatin1String(", ");
1548  }
1549  finalString.truncate(finalString.length() - 2);
1550  return finalString;
1551 }
1552 
1561 {
1562  return QKeySequence(str, format);
1563 }
1564 
1574 {
1576 
1577  const QStringList strings = str.split(QLatin1String("; "));
1578  result.reserve(strings.count());
1579  for (const QString &string : strings) {
1580  result << fromString(string, format);
1581  }
1582 
1583  return result;
1584 }
1585 
1595 {
1596  QString result;
1597 
1598  for (const QKeySequence &sequence : list) {
1599  result += sequence.toString(format);
1600  result += QLatin1String("; ");
1601  }
1602  result.truncate(result.length() - 2);
1603 
1604  return result;
1605 }
1606 
1607 /*****************************************************************************
1608  QKeySequence stream functions
1609  *****************************************************************************/
1610 #if !defined(QT_NO_DATASTREAM)
1620 {
1621  static_assert(QKeySequencePrivate::MaxKeyCount == 4, "Forgot to adapt QDataStream &operator<<(QDataStream &s, const QKeySequence &keysequence) to new QKeySequence::MaxKeyCount");
1622  const bool extended = s.version() >= 5 && keysequence.count() > 1;
1623  s << quint32(extended ? 4 : 1) << quint32(keysequence.d->key[0]);
1624  if (extended) {
1625  s << quint32(keysequence.d->key[1])
1626  << quint32(keysequence.d->key[2])
1627  << quint32(keysequence.d->key[3]);
1628  }
1629  return s;
1630 }
1631 
1632 
1642 {
1643  const quint32 MaxKeys = QKeySequencePrivate::MaxKeyCount;
1644  quint32 c;
1645  s >> c;
1646  quint32 keys[MaxKeys] = {0};
1647  for (uint i = 0; i < qMin(c, MaxKeys); ++i) {
1648  if (s.atEnd()) {
1649  qWarning("Premature EOF while reading QKeySequence");
1650  return s;
1651  }
1652  s >> keys[i];
1653  }
1654  qAtomicDetach(keysequence.d);
1655  std::copy(keys, keys + MaxKeys, QT_MAKE_CHECKED_ARRAY_ITERATOR(keysequence.d->key, MaxKeys));
1656  return s;
1657 }
1658 
1659 #endif //QT_NO_DATASTREAM
1660 
1661 #ifndef QT_NO_DEBUG_STREAM
1663 {
1664  QDebugStateSaver saver(dbg);
1665  dbg.nospace() << "QKeySequence(" << p.toString() << ')';
1666  return dbg;
1667 }
1668 #endif
1669 
1681 
1682 #include "moc_qkeysequence.cpp"
small capitals from c petite p scientific i
[1]
Definition: afcover.h:80
bool ref() noexcept
Definition: qbasicatomic.h:101
bool deref() noexcept
Definition: qbasicatomic.h:102
T loadRelaxed() const noexcept
Definition: qbasicatomic.h:90
The QChar class provides a 16-bit Unicode character.
Definition: qchar.h:84
static constexpr QChar fromUcs2(char16_t c) noexcept
Definition: qchar.h:134
static constexpr bool requiresSurrogates(char32_t ucs4) noexcept
Definition: qchar.h:535
static constexpr char16_t highSurrogate(char32_t ucs4) noexcept
Definition: qchar.h:549
constexpr char16_t unicode() const noexcept
Definition: qchar.h:489
static constexpr char16_t lowSurrogate(char32_t ucs4) noexcept
Definition: qchar.h:553
QChar toUpper() const noexcept
Definition: qchar.h:480
static QString translate(const char *context, const char *key, const char *disambiguation=nullptr, int n=-1)
The QDataStream class provides serialization of binary data to a QIODevice.
Definition: qdatastream.h:66
operator>>(QDataStream &ds, qfloat16 &f)
Definition: qfloat16.cpp:344
operator<<(QDataStream &ds, qfloat16 f)
Definition: qfloat16.cpp:327
The QDebug class provides an output stream for debugging information.
Definition: qdebug.h:65
static QString toString(T &&object)
Definition: qdebug.h:163
QDebug & nospace()
Definition: qdebug.h:113
Convenience class for custom QDebug operators.
Definition: qdebug.h:176
bool operator<(const QElapsedTimer &lhs, const QElapsedTimer &rhs) noexcept
template< typename Enum > size_t qHash(QFlags< Enum > flags, size_t seed=0) noexcept
static QPlatformTheme * platformTheme()
template< typename InputIterator > size_t qHashRange(InputIterator first, InputIterator last, size_t seed=0)
static constexpr QKeyCombination fromCombined(int combined)
Definition: qnamespace.h:1897
The QKeySequence class encapsulates a key sequence as used by shortcuts.
Definition: qkeysequence.h:71
SequenceMatch matches(const QKeySequence &seq) const
QKeySequence & operator=(const QKeySequence &other)
static QKeySequence mnemonic(const QString &text)
bool operator<(const QKeySequence &ks) const
static QKeySequence fromString(const QString &str, SequenceFormat format=PortableText)
void qt_set_sequence_auto_mnemonic(bool b)
int count() const
static QList< QKeySequence > keyBindings(StandardKey key)
bool isDetached() const
static QList< QKeySequence > listFromString(const QString &str, SequenceFormat format=PortableText)
QKeyCombination operator[](uint i) const
static QString listToString(const QList< QKeySequence > &list, SequenceFormat format=PortableText)
bool isEmpty() const
bool operator==(const QKeySequence &other) const
QString toString(SequenceFormat format=PortableText) const
int key[MaxKeyCount]
static Q_GUI_EXPORT QString keyName(int key, QKeySequence::SequenceFormat format)
static QString encodeString(int key, QKeySequence::SequenceFormat format)
static int decodeString(QString accel, QKeySequence::SequenceFormat format)
The QLatin1String class provides a thin wrapper around an US-ASCII/Latin-1 encoded string literal.
Definition: qstring.h:84
qsizetype size() const noexcept
Definition: qlist.h:414
bool isEmpty() const noexcept
Definition: qlist.h:418
const_reference at(qsizetype i) const noexcept
Definition: qlist.h:457
The QString class provides a Unicode character string.
Definition: qstring.h:388
QString right(qsizetype n) const
Definition: qstring.cpp:4970
qsizetype count() const
Definition: qstring.h:414
qsizetype lastIndexOf(QChar c, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:514
static QString fromLatin1(QByteArrayView ba)
Definition: qstring.cpp:5488
QStringList split(const QString &sep, Qt::SplitBehavior behavior=Qt::KeepEmptyParts, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition: qstring.cpp:7672
void truncate(qsizetype pos)
Definition: qstring.cpp:5934
QString mid(qsizetype position, qsizetype n=-1) const
Definition: qstring.cpp:4994
const QChar at(qsizetype i) const
Definition: qstring.h:1212
bool isEmpty() const
Definition: qstring.h:1216
QString arg(qlonglong a, int fieldwidth=0, int base=10, QChar fillChar=QLatin1Char(' ')) const
Definition: qstring.cpp:8318
QString toLower() const &
Definition: qstring.h:611
bool contains(QChar c, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition: qstring.h:1353
QString left(qsizetype n) const
Definition: qstring.cpp:4951
static QString static QString qsizetype indexOf(QChar c, qsizetype from=0, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition: qstring.cpp:4197
QString & remove(qsizetype i, qsizetype len)
Definition: qstring.cpp:3252
qsizetype length() const
Definition: qstring.h:415
The QStringList class provides a list of strings.
The QStringView class provides a unified view on UTF-16 strings with a read-only subset of the QStrin...
Definition: qstringview.h:122
constexpr qsizetype length() const noexcept
Definition: qstringview.h:464
int toInt(bool *ok=nullptr, int base=10) const
Definition: qstring.h:1176
constexpr QChar at(qsizetype n) const noexcept
Definition: qstringview.h:259
constexpr QStringView mid(qsizetype pos, qsizetype n=-1) const noexcept
Definition: qstringview.h:261
The QVariant class acts like a union for the most common Qt data types.
Definition: qvariant.h:95
static auto fromValue(const T &value) -> std::enable_if_t< std::is_copy_constructible_v< T >, QVariant >
Definition: qvariant.h:391
QString str
[2]
QString text
[meta data]
list append(new Employee("Blackpool", "Stephen"))
part
Definition: enum_inc.h:2
std::string toLower(std::string const &s)
@ CTRL
Definition: qnamespace.h:1096
@ META
Definition: qnamespace.h:1094
@ SHIFT
Definition: qnamespace.h:1095
@ ALT
Definition: qnamespace.h:1097
@ Key_PreviousCandidate
Definition: qnamespace.h:765
@ Key_Escape
Definition: qnamespace.h:684
@ Key_Memo
Definition: qnamespace.h:919
@ Key_Community
Definition: qnamespace.h:927
@ Key_LastNumberRedial
Definition: qnamespace.h:1062
@ Key_TouchpadOn
Definition: qnamespace.h:1007
@ Key_BassBoost
Definition: qnamespace.h:874
@ Key_Terminal
Definition: qnamespace.h:971
@ Key_Katakana
Definition: qnamespace.h:778
@ Key_Yes
Definition: qnamespace.h:1037
@ Key_Favorites
Definition: qnamespace.h:887
@ Key_Copy
Definition: qnamespace.h:938
@ Key_PowerDown
Definition: qnamespace.h:998
@ Key_MediaPrevious
Definition: qnamespace.h:881
@ Key_Tab
Definition: qnamespace.h:685
@ Key_ZoomIn
Definition: qnamespace.h:977
@ Key_LaunchMail
Definition: qnamespace.h:891
@ Key_Hibernate
Definition: qnamespace.h:995
@ Key_Select
Definition: qnamespace.h:1036
@ Key_ZoomOut
Definition: qnamespace.h:978
@ Key_Yellow
Definition: qnamespace.h:1014
@ Key_Book
Definition: qnamespace.h:932
@ Key_MailForward
Definition: qnamespace.h:982
@ Key_Shift
Definition: qnamespace.h:704
@ Key_Return
Definition: qnamespace.h:688
@ Key_Support
Definition: qnamespace.h:969
@ Key_LaunchG
Definition: qnamespace.h:1003
@ Key_Hangul_End
Definition: qnamespace.h:800
@ Key_Context2
Definition: qnamespace.h:1054
@ Key_TouchpadOff
Definition: qnamespace.h:1008
@ Key_Launch5
Definition: qnamespace.h:898
@ Key_Context1
Definition: qnamespace.h:1053
@ Key_KeyboardBrightnessUp
Definition: qnamespace.h:912
@ Key_Right
Definition: qnamespace.h:700
@ Key_Hangul
Definition: qnamespace.h:798
@ Key_Enter
Definition: qnamespace.h:689
@ Key_MultipleCandidate
Definition: qnamespace.h:764
@ Key_Documents
Definition: qnamespace.h:942
@ Key_Eisu_toggle
Definition: qnamespace.h:788
@ Key_PageUp
Definition: qnamespace.h:702
@ Key_Printer
Definition: qnamespace.h:1042
@ Key_Execute
Definition: qnamespace.h:1043
@ Key_Cancel
Definition: qnamespace.h:1041
@ Key_Space
Definition: qnamespace.h:538
@ Key_ChannelDown
Definition: qnamespace.h:1018
@ Key_Tools
Definition: qnamespace.h:972
@ Key_MediaTogglePlayPause
Definition: qnamespace.h:885
@ Key_Hangup
Definition: qnamespace.h:1058
@ Key_OfficeHome
Definition: qnamespace.h:955
@ Key_MenuKB
Definition: qnamespace.h:951
@ Key_Bluetooth
Definition: qnamespace.h:986
@ Key_Hangul_Start
Definition: qnamespace.h:799
@ Key_Video
Definition: qnamespace.h:974
@ Key_Hankaku
Definition: qnamespace.h:781
@ Key_Music
Definition: qnamespace.h:984
@ Key_ToDoList
Definition: qnamespace.h:935
@ Key_Hangul_PreHanja
Definition: qnamespace.h:807
@ Key_UWB
Definition: qnamespace.h:988
@ Key_Go
Definition: qnamespace.h:946
@ Key_Game
Definition: qnamespace.h:945
@ Key_LaunchF
Definition: qnamespace.h:908
@ Key_Open
Definition: qnamespace.h:1028
@ Key_MonBrightnessUp
Definition: qnamespace.h:909
@ Key_Eisu_Shift
Definition: qnamespace.h:787
@ Key_PowerOff
Definition: qnamespace.h:914
@ Key_Exit
Definition: qnamespace.h:1050
@ Key_Undo
Definition: qnamespace.h:1030
@ Key_Context3
Definition: qnamespace.h:1055
@ Key_WebCam
Definition: qnamespace.h:981
@ Key_MenuPB
Definition: qnamespace.h:952
@ Key_Market
Definition: qnamespace.h:949
@ Key_Zenkaku
Definition: qnamespace.h:780
@ Key_News
Definition: qnamespace.h:954
@ Key_Launch9
Definition: qnamespace.h:902
@ Key_Battery
Definition: qnamespace.h:985
@ Key_F35
Definition: qnamespace.h:745
@ Key_Kana_Lock
Definition: qnamespace.h:785
@ Key_Backspace
Definition: qnamespace.h:687
@ Key_VolumeUp
Definition: qnamespace.h:873
@ Key_Backtab
Definition: qnamespace.h:686
@ Key_VolumeDown
Definition: qnamespace.h:871
@ Key_HomePage
Definition: qnamespace.h:886
@ Key_Launch6
Definition: qnamespace.h:899
@ Key_Zenkaku_Hankaku
Definition: qnamespace.h:782
@ Key_Insert
Definition: qnamespace.h:690
@ Key_New
Definition: qnamespace.h:1027
@ Key_DOS
Definition: qnamespace.h:941
@ Key_LaunchA
Definition: qnamespace.h:903
@ Key_Touroku
Definition: qnamespace.h:783
@ Key_Pictures
Definition: qnamespace.h:983
@ Key_Guide
Definition: qnamespace.h:1020
@ Key_View
Definition: qnamespace.h:996
@ Key_Subtitle
Definition: qnamespace.h:992
@ Key_AudioRepeat
Definition: qnamespace.h:990
@ Key_Launch7
Definition: qnamespace.h:900
@ Key_Left
Definition: qnamespace.h:698
@ Key_Cut
Definition: qnamespace.h:939
@ Key_LaunchH
Definition: qnamespace.h:1004
@ Key_WakeUp
Definition: qnamespace.h:915
@ Key_Hangul_PostHanja
Definition: qnamespace.h:808
@ Key_MicVolumeDown
Definition: qnamespace.h:1025
@ Key_ClearGrab
Definition: qnamespace.h:936
@ Key_Control
Definition: qnamespace.h:705
@ Key_ApplicationLeft
Definition: qnamespace.h:930
@ Key_Redo
Definition: qnamespace.h:1031
@ Key_Launch3
Definition: qnamespace.h:896
@ Key_AddFavorite
Definition: qnamespace.h:923
@ Key_AudioRewind
Definition: qnamespace.h:928
@ Key_TouchpadToggle
Definition: qnamespace.h:1006
@ Key_Alt
Definition: qnamespace.h:707
@ Key_LightBulb
Definition: qnamespace.h:920
@ Key_BackForward
Definition: qnamespace.h:929
@ Key_MySites
Definition: qnamespace.h:953
@ Key_VolumeMute
Definition: qnamespace.h:872
@ Key_Phone
Definition: qnamespace.h:958
@ Key_Hangul_Special
Definition: qnamespace.h:812
@ Key_Find
Definition: qnamespace.h:1029
@ Key_Excel
Definition: qnamespace.h:943
@ Key_Messenger
Definition: qnamespace.h:980
@ Key_Hangul_Banja
Definition: qnamespace.h:806
@ Key_SysReq
Definition: qnamespace.h:694
@ Key_Meeting
Definition: qnamespace.h:950
@ Key_ApplicationRight
Definition: qnamespace.h:931
@ Key_Xfer
Definition: qnamespace.h:976
@ Key_LaunchD
Definition: qnamespace.h:906
@ Key_ChannelUp
Definition: qnamespace.h:1017
@ Key_Reload
Definition: qnamespace.h:961
@ Key_Print
Definition: qnamespace.h:693
@ Key_Pause
Definition: qnamespace.h:692
@ Key_ContrastAdjust
Definition: qnamespace.h:1000
@ Key_AudioCycleTrack
Definition: qnamespace.h:993
@ Key_MicVolumeUp
Definition: qnamespace.h:1024
@ Key_BrightnessAdjust
Definition: qnamespace.h:925
@ Key_Finance
Definition: qnamespace.h:926
@ Key_Kanji
Definition: qnamespace.h:772
@ Key_Calendar
Definition: qnamespace.h:959
@ Key_ScreenSaver
Definition: qnamespace.h:917
@ Key_Up
Definition: qnamespace.h:699
@ Key_RotateWindows
Definition: qnamespace.h:962
@ Key_TrebleUp
Definition: qnamespace.h:877
@ Key_TrebleDown
Definition: qnamespace.h:878
@ Key_MonBrightnessDown
Definition: qnamespace.h:910
@ Key_Hiragana_Katakana
Definition: qnamespace.h:779
@ Key_Info
Definition: qnamespace.h:1021
@ Key_SplitScreen
Definition: qnamespace.h:968
@ Key_CameraFocus
Definition: qnamespace.h:1065
@ Key_Kana_Shift
Definition: qnamespace.h:786
@ Key_Down
Definition: qnamespace.h:701
@ Key_Shop
Definition: qnamespace.h:921
@ Key_LaunchMedia
Definition: qnamespace.h:892
@ Key_Close
Definition: qnamespace.h:937
@ Key_Option
Definition: qnamespace.h:956
@ Key_Red
Definition: qnamespace.h:1012
@ Key_MediaPause
Definition: qnamespace.h:884
@ Key_Refresh
Definition: qnamespace.h:870
@ Key_Spell
Definition: qnamespace.h:967
@ Key_Save
Definition: qnamespace.h:965
@ Key_BassUp
Definition: qnamespace.h:875
@ Key_Launch2
Definition: qnamespace.h:895
@ Key_Delete
Definition: qnamespace.h:691
@ Key_NumLock
Definition: qnamespace.h:709
@ Key_Meta
Definition: qnamespace.h:706
@ Key_Forward
Definition: qnamespace.h:868
@ Key_Standby
Definition: qnamespace.h:889
@ Key_Hangul_Romaja
Definition: qnamespace.h:803
@ Key_RotationKB
Definition: qnamespace.h:964
@ Key_Launch4
Definition: qnamespace.h:897
@ Key_Launch0
Definition: qnamespace.h:893
@ Key_Settings
Definition: qnamespace.h:1022
@ Key_Help
Definition: qnamespace.h:751
@ Key_Travel
Definition: qnamespace.h:973
@ Key_ScrollLock
Definition: qnamespace.h:710
@ Key_Send
Definition: qnamespace.h:966
@ Key_Sleep
Definition: qnamespace.h:1044
@ Key_Eject
Definition: qnamespace.h:916
@ Key_Hiragana
Definition: qnamespace.h:777
@ Key_MediaRecord
Definition: qnamespace.h:883
@ Key_LaunchB
Definition: qnamespace.h:904
@ Key_F1
Definition: qnamespace.h:711
@ Key_Henkan
Definition: qnamespace.h:775
@ Key_History
Definition: qnamespace.h:922
@ Key_WLAN
Definition: qnamespace.h:987
@ Key_Green
Definition: qnamespace.h:1013
@ Key_Play
Definition: qnamespace.h:1045
@ Key_Calculator
Definition: qnamespace.h:934
@ Key_RotationPB
Definition: qnamespace.h:963
@ Key_Word
Definition: qnamespace.h:975
@ Key_Menu
Definition: qnamespace.h:748
@ Key_LaunchC
Definition: qnamespace.h:905
@ Key_BassDown
Definition: qnamespace.h:876
@ Key_Muhenkan
Definition: qnamespace.h:773
@ Key_PageDown
Definition: qnamespace.h:703
@ Key_TaskPane
Definition: qnamespace.h:970
@ Key_AudioRandomPlay
Definition: qnamespace.h:991
@ Key_Codeinput
Definition: qnamespace.h:762
@ Key_Launch1
Definition: qnamespace.h:894
@ Key_Back
Definition: qnamespace.h:867
@ Key_Home
Definition: qnamespace.h:696
@ Key_Hangul_Jeonja
Definition: qnamespace.h:805
@ Key_Away
Definition: qnamespace.h:979
@ Key_KeyboardBrightnessDown
Definition: qnamespace.h:913
@ Key_Camera
Definition: qnamespace.h:1064
@ Key_LaunchE
Definition: qnamespace.h:907
@ Key_WWW
Definition: qnamespace.h:918
@ Key_Clear
Definition: qnamespace.h:695
@ Key_Massyo
Definition: qnamespace.h:784
@ Key_KeyboardLightOnOff
Definition: qnamespace.h:911
@ Key_Context4
Definition: qnamespace.h:1056
@ Key_MediaStop
Definition: qnamespace.h:880
@ Key_TopMenu
Definition: qnamespace.h:997
@ Key_Hangul_Hanja
Definition: qnamespace.h:801
@ Key_Call
Definition: qnamespace.h:1057
@ Key_HotLinks
Definition: qnamespace.h:924
@ Key_CapsLock
Definition: qnamespace.h:708
@ Key_Zoom
Definition: qnamespace.h:1046
@ Key_Suspend
Definition: qnamespace.h:999
@ Key_Time
Definition: qnamespace.h:994
@ Key_MicMute
Definition: qnamespace.h:1010
@ Key_MediaPlay
Definition: qnamespace.h:879
@ Key_Hangul_Jamo
Definition: qnamespace.h:802
@ Key_Search
Definition: qnamespace.h:888
@ Key_Paste
Definition: qnamespace.h:957
@ Key_LogOff
Definition: qnamespace.h:948
@ Key_Stop
Definition: qnamespace.h:869
@ Key_Blue
Definition: qnamespace.h:1015
@ Key_unknown
Definition: qnamespace.h:1070
@ Key_CD
Definition: qnamespace.h:933
@ Key_Display
Definition: qnamespace.h:940
@ Key_Romaji
Definition: qnamespace.h:776
@ Key_Reply
Definition: qnamespace.h:960
@ Key_Explorer
Definition: qnamespace.h:944
@ Key_OpenUrl
Definition: qnamespace.h:890
@ Key_Launch8
Definition: qnamespace.h:901
@ Key_AudioForward
Definition: qnamespace.h:989
@ Key_MediaNext
Definition: qnamespace.h:882
@ Key_End
Definition: qnamespace.h:697
@ Key_ToggleCallHangup
Definition: qnamespace.h:1060
@ Key_VoiceDial
Definition: qnamespace.h:1061
@ Key_No
Definition: qnamespace.h:1038
@ Key_iTouch
Definition: qnamespace.h:947
@ Key_Flip
Definition: qnamespace.h:1059
@ ShiftModifier
Definition: qnamespace.h:1075
@ ControlModifier
Definition: qnamespace.h:1076
@ MetaModifier
Definition: qnamespace.h:1078
@ KeypadModifier
Definition: qnamespace.h:1079
@ AltModifier
Definition: qnamespace.h:1077
@ AA_MacDontSwapCtrlAndMeta
Definition: qnamespace.h:457
int distance(TestIterator &a, TestIterator &b)
QT_WARNING_POP void qAtomicAssign(T *&d, T *x)
Definition: qatomic.h:241
void qAtomicDetach(T *&d)
Definition: qatomic.h:260
#define QT_MAKE_CHECKED_ARRAY_ITERATOR(x, N)
#define qApp
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter * sub
unsigned int quint32
Definition: qglobal.h:288
unsigned int uint
Definition: qglobal.h:334
unsigned short ushort
Definition: qglobal.h:333
#define Q_GLOBAL_STATIC(TYPE, NAME,...)
@ text
int key
Q_DECLARE_TYPEINFO(QModifKeyName, Q_RELOCATABLE_TYPE)
#define qWarning
Definition: qlogging.h:179
GLboolean GLboolean GLboolean b
GLuint64 key
GLuint index
[2]
GLuint GLuint end
GLsizei const GLchar ** strings
[1]
GLuint name
GLfloat n
GLint GLsizei GLsizei GLenum format
const GLubyte * c
Definition: qopenglext.h:12701
GLuint entry
Definition: qopenglext.h:11002
GLdouble GLdouble GLdouble GLdouble q
Definition: qopenglext.h:259
GLuint64EXT * result
[6]
Definition: qopenglext.h:10932
GLdouble s
[6]
Definition: qopenglext.h:235
GLfloat GLfloat p
[1]
Definition: qopenglext.h:12698
#define Q_ASSERT(cond)
Definition: qrandom.cpp:84
#define Q_ASSERT_X(cond, x, msg)
Definition: qrandom.cpp:85
QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator begin(const QRegularExpressionMatchIterator &iterator)
#define k1
@ Q_RELOCATABLE_TYPE
Definition: qtypeinfo.h:156
QStringList keys
QSharedPointer< T > other(t)
[5]
QStringList list
[0]
The QLatin1Char class provides an 8-bit ASCII/Latin-1 character.
Definition: qchar.h:53
QModifKeyName(int q, QChar n)
QModifKeyName(int q, const QString &n)
QRhiShaderResourceBinding bindings[2]
Definition: texuploads.cpp:72
QDomElement find(const QString &tagName, const QDomElement &e)
Definition: main.cpp:39