QT6 源,六章,事件系统(5):QKeyEvent 键盘事件,类 QKeyCombination;枚举类 Key、KeyboardModifier 与 Modifier

(1)

/*
The QKeyEvent class describes a key event.

Detailed Description  :
当按键被按下或释放时,键盘输入焦点会将键事件发送给小部件。
-个关键事件包含一个特殊的接受标志,该标志指示接收者是否将处理该关键事件。
对于 QEvent:KeyPress 和QEvent::KeyRelease,该标志默认为已设置,
因此在处理关键事件时无需调用 accept ()方法。

对于 QEvent:.Shortcutoveride,接收者需要显式接受该事件以触发重定义。
在关键事件上调用ignore()方法会将该事件传播到其父控件。
事件会沿着父控件链向上传播,直到有控件接受它或事件过滤器将其消耗掉。

QWidget::setEnabled()函数可用于启用或禁用对某个窗口的鼠标和键盘事件。

事件处理程序QWidget::keyPressEvent(),QWidget::keyReleaseEvent(),
QGraphicsItem::keyPressEvent()和QGraphicsItem::keyReleaseEvent()接收关键事件。

*/

class Q_GUI_EXPORT QKeyEvent : public QInputEvent  //enum Qt::Key { ... };
{
    Q_EVENT_DISABLE_COPY(QKeyEvent);

protected:
    QString  m_text           ;
    int      m_key            ; //键码
    quint32  m_scanCode       ;
    quint32  m_virtualKey     ;
    quint32  m_nativeModifiers; //修饰符
    quint16  m_count      : 15;
    quint16  m_autoRepeat :  1;

    friend inline bool operator== (QKeyEvent * e, QKeySequence::StandardKey key)
    { return (e ? e->matches(key) : false); }

    friend inline bool operator== (QKeySequence::StandardKey key, QKeyEvent * e)
    { return (e ? e->matches(key) : false); }

public:

    //Constructs a key event object.
    //The type parameter must be QEvent::KeyPress,
    //  QEvent::KeyRelease, or QEvent::ShortcutOverride.
    //Int key is the code for the Qt::Key that the event loop should listen for.
    //If key is 0, the event is not a result of a known key;
    //  for example, it may be the result of a compose sequence or keyboard macro.
    //The modifiers holds the keyboard modifiers,
    //  and the given text is the Unicode text that the key generated.
    //If autorep is true, isAutoRepeat() will be true.
    //count is the number of keys involved in the event.
    //说人话:事件类型,键盘符,修饰符,对应按键文本,是否重复,涉及的按键数量。
    QKeyEvent(Type type, int key, Qt::KeyboardModifiers modifiers,
                const QString & text = QString(),
                bool  autorep = false, quint16 count = 1);

    QKeyEvent(Type type, int key, Qt::KeyboardModifiers modifiers, //增加了对快捷键的描述
                quint32 nativeScanCode, quint32 nativeVirtualKey, quint32 nativeModifiers,
                const QString & text = QString(),
                bool autorep = false, quint16 count = 1,
                const QInputDevice * device = QInputDevice::primaryKeyboard());
    //In addition to the normal key event data,
    //  also contains nativeScanCode, nativeVirtualKey and nativeModifiers.
    //This extra data is used by the shortcut system,
    //  to determine which shortcuts to trigger.


    ~QKeyEvent();

    QKeyEvent * clone() const override { return new QKeyEvent(* this); }

    //返回此键生成的Unicode文本。
    //当按下Shift、Control、Alt和Meta等修饰键时,返回值因平台而异,并可能返回空字符串。
    //注意:key()将始终返回一个有效值,与修饰键无关。
    inline
    QString text   () const { return m_text; }

    int     key    () const { return m_key ; }
    //返回按下或释放的键的代码。请参阅 Qt:.Key 查看键盘代码列表。这些代码与底层窗口系统无关。
    //请注意,此函数不区分大写和小写字母,请使用 text()函数(返回由该键生成的 Unicode 文本)来实现此功能。
    //值要么是0,要么是Ot:Key unknown,表示该事件并非已知键的结果;
    //  例如,它可能是合成序列、键盘宏的结果或者是由键事件压缩导致的。

    //enum QKeySequence::StandardKey { ..., Open, Close, ... };//描述快捷键的语义
    bool    matches(QKeySequence::StandardKey key) const;
    //Returns true if the key event matches the given standard key;
    //  otherwise returns false.

    //返回键事件的原生扫描代码。如果键事件不包含此数据,则返回0。
    //注意:即使按键事件包含扩展信息,原生扫描代码也可能为0。
    inline quint32   nativeScanCode  () const { return m_scanCode       ; }
    inline quint32   nativeVirtualKey() const { return m_virtualKey     ; }
    //返回原生虚拟键,或键事件的键符号。如果键事件不包含此数据,则返回0。
    inline quint32   nativeModifiers () const { return m_nativeModifiers; }
    //Returns the native modifiers of a key event.
    //If the key event does not contain this data 0 is returned.

    Qt::KeyboardModifiers  modifiers() const; //修饰符相关
    //返回事件发生后立即存在的键盘修饰符标志。
    //警告:这个函数并非总是可靠。例如,用户可以通过同时按下Shift键然后松开其中一个键来混淆其功能。

    inline int   count       () const { return int(m_count); }
    inline bool  isAutoRepeat() const { return m_autoRepeat; }


    //class QKeyCombination {  int combination; };
    //Returns a QKeyCombination object containing both the key() and the
    //  modifiers() carried by this event.
    QKeyCombination     keyCombination() const
    {
        return QKeyCombination(modifiers(), Qt::Key(m_key));
    }

}; //完结 class QKeyEvent : public QInputEvent

++ 测试一下

在这里插入图片描述

(2) 类 QKeyCombination

//The QKeyCombination class stores a combination of a key with optional modifiers.
//QKeyCombination 类可以用于表示键与零个或多个键盘修饰符的组合。
class QKeyCombination
{
    int combination;

public:
    constexpr Q_IMPLICIT
    QKeyCombination(Qt::Key key = Qt::Key_unknown) noexcept
        : combination(int(key)) {}

    constexpr explicit
    QKeyCombination(Qt::        Modifiers modifiers,  //这两种修饰符都在本文件里,一样内容的
                    Qt::Key key = Qt::Key_unknown) noexcept
        : combination(modifiers.toInt() | int(key)) {}

    constexpr explicit
    QKeyCombination(Qt::KeyboardModifiers modifiers,
                    Qt::Key key = Qt::Key_unknown) noexcept
        : combination(modifiers.toInt() | int(key)) {}

    constexpr Qt::KeyboardModifiers keyboardModifiers() const noexcept
    {
        return Qt::KeyboardModifiers(combination & Qt::KeyboardModifierMask);
    }

    constexpr Qt::Key               key              () const noexcept
    {
        return Qt::Key(combination & ~int(Qt::KeyboardModifierMask));
    }

    static constexpr
    QKeyCombination fromCombined(int combined) //由一个数值得到按键组合
    {
        QKeyCombination result;
        result.combination = combined;
        return result;
    }

    constexpr
    int               toCombined() const noexcept  //给出本类存储的按键组合
    {
        return combination;
    }


    friend constexpr bool operator== (QKeyCombination lhs, QKeyCombination rhs) noexcept
    {
        return lhs.combination == rhs.combination;
    }

    friend constexpr bool operator!= (QKeyCombination lhs, QKeyCombination rhs) noexcept
    {
        return lhs.combination != rhs.combination;
    }

    bool operator<(QKeyCombination) const = delete;
}; //完结 class QKeyCombination
Q_DECLARE_TYPEINFO(QKeyCombination, Q_RELOCATABLE_TYPE);

constexpr QKeyCombination operator|(Qt::Modifier modifier, Qt::Key key) noexcept
{
    return QKeyCombination(modifier, key);
}

constexpr QKeyCombination operator|(Qt::Modifiers modifiers, Qt::Key key) noexcept
{
    return QKeyCombination(modifiers, key);
}

constexpr QKeyCombination operator|(Qt::KeyboardModifier modifier, Qt::Key key) noexcept
{
    return QKeyCombination(modifier, key);
}

constexpr QKeyCombination operator|(Qt::KeyboardModifiers modifiers, Qt::Key key) noexcept
{
    return QKeyCombination(modifiers, key);
}

constexpr QKeyCombination operator|(Qt::Key key, Qt::Modifier modifier) noexcept
{
    return QKeyCombination(modifier, key);
}

constexpr QKeyCombination operator|(Qt::Key key, Qt::Modifiers modifiers) noexcept
{
    return QKeyCombination(modifiers, key);
}

constexpr QKeyCombination operator|(Qt::Key key, Qt::KeyboardModifier modifier) noexcept
{
    return QKeyCombination(modifier, key);
}

constexpr QKeyCombination operator|(Qt::Key key, Qt::KeyboardModifiers modifiers) noexcept
{
    return QKeyCombination(modifiers, key);
}

(3) 枚举类 Key ,该类里的枚举量非常多,慎重点开

    //The key names used by Qt.
    enum Key {
        // Unicode Basic Latin block (0x00-0x7f) 共 255 个,还有不同语言的键盘
        Key_Space = 0x20,
        Key_Any = Key_Space,
        Key_Exclam = 0x21,
        Key_QuoteDbl = 0x22,
        Key_NumberSign = 0x23,
        Key_Dollar = 0x24,
        Key_Percent = 0x25,
        Key_Ampersand = 0x26,
        Key_Apostrophe = 0x27,
        Key_ParenLeft = 0x28,
        Key_ParenRight = 0x29,
        Key_Asterisk = 0x2a,
        Key_Plus = 0x2b,
        Key_Comma = 0x2c,
        Key_Minus = 0x2d,
        Key_Period = 0x2e,
        Key_Slash = 0x2f,
        Key_0 = 0x30,
        Key_1 = 0x31,
        Key_2 = 0x32,
        Key_3 = 0x33,
        Key_4 = 0x34,
        Key_5 = 0x35,
        Key_6 = 0x36,
        Key_7 = 0x37,
        Key_8 = 0x38,
        Key_9 = 0x39,
        Key_Colon = 0x3a,
        Key_Semicolon = 0x3b,
        Key_Less = 0x3c,
        Key_Equal = 0x3d,
        Key_Greater = 0x3e,
        Key_Question = 0x3f,
        Key_At = 0x40,
        Key_A = 0x41,
        Key_B = 0x42,
        Key_C = 0x43,
        Key_D = 0x44,
        Key_E = 0x45,
        Key_F = 0x46,
        Key_G = 0x47,
        Key_H = 0x48,
        Key_I = 0x49,
        Key_J = 0x4a,
        Key_K = 0x4b,
        Key_L = 0x4c,
        Key_M = 0x4d,
        Key_N = 0x4e,
        Key_O = 0x4f,
        Key_P = 0x50,
        Key_Q = 0x51,
        Key_R = 0x52,
        Key_S = 0x53,
        Key_T = 0x54,
        Key_U = 0x55,
        Key_V = 0x56,
        Key_W = 0x57,
        Key_X = 0x58,
        Key_Y = 0x59,
        Key_Z = 0x5a,
        Key_BracketLeft = 0x5b,
        Key_Backslash = 0x5c,
        Key_BracketRight = 0x5d,
        Key_AsciiCircum = 0x5e,
        Key_Underscore = 0x5f,
        Key_QuoteLeft = 0x60,
        Key_BraceLeft = 0x7b,
        Key_Bar = 0x7c,
        Key_BraceRight = 0x7d,
        Key_AsciiTilde = 0x7e,

        // Unicode Latin-1 Supplement block (0x80-0xff)
        Key_nobreakspace = 0x0a0,
        Key_exclamdown = 0x0a1,
        Key_cent = 0x0a2,
        Key_sterling = 0x0a3,
        Key_currency = 0x0a4,
        Key_yen = 0x0a5,
        Key_brokenbar = 0x0a6,
        Key_section = 0x0a7,
        Key_diaeresis = 0x0a8,
        Key_copyright = 0x0a9,
        Key_ordfeminine = 0x0aa,
        Key_guillemotleft = 0x0ab,        // left angle quotation mark
        Key_notsign = 0x0ac,
        Key_hyphen = 0x0ad,
        Key_registered = 0x0ae,
        Key_macron = 0x0af,
        Key_degree = 0x0b0,
        Key_plusminus = 0x0b1,
        Key_twosuperior = 0x0b2,
        Key_threesuperior = 0x0b3,
        Key_acute = 0x0b4,
        Key_mu = 0x0b5,
        Key_paragraph = 0x0b6,
        Key_periodcentered = 0x0b7,
        Key_cedilla = 0x0b8,
        Key_onesuperior = 0x0b9,
        Key_masculine = 0x0ba,
        Key_guillemotright = 0x0bb,        // right angle quotation mark
        Key_onequarter = 0x0bc,
        Key_onehalf = 0x0bd,
        Key_threequarters = 0x0be,
        Key_questiondown = 0x0bf,
        Key_Agrave = 0x0c0,
        Key_Aacute = 0x0c1,
        Key_Acircumflex = 0x0c2,
        Key_Atilde = 0x0c3,
        Key_Adiaeresis = 0x0c4,
        Key_Aring = 0x0c5,
        Key_AE = 0x0c6,
        Key_Ccedilla = 0x0c7,
        Key_Egrave = 0x0c8,
        Key_Eacute = 0x0c9,
        Key_Ecircumflex = 0x0ca,
        Key_Ediaeresis = 0x0cb,
        Key_Igrave = 0x0cc,
        Key_Iacute = 0x0cd,
        Key_Icircumflex = 0x0ce,
        Key_Idiaeresis = 0x0cf,
        Key_ETH = 0x0d0,
        Key_Ntilde = 0x0d1,
        Key_Ograve = 0x0d2,
        Key_Oacute = 0x0d3,
        Key_Ocircumflex = 0x0d4,
        Key_Otilde = 0x0d5,
        Key_Odiaeresis = 0x0d6,
        Key_multiply = 0x0d7,
        Key_Ooblique = 0x0d8,
        Key_Ugrave = 0x0d9,
        Key_Uacute = 0x0da,
        Key_Ucircumflex = 0x0db,
        Key_Udiaeresis = 0x0dc,
        Key_Yacute = 0x0dd,
        Key_THORN = 0x0de,
        Key_ssharp = 0x0df,
        Key_division = 0x0f7,
        Key_ydiaeresis = 0x0ff,

        // The rest of the Unicode values are skipped here,
        // so that we can represent them along with Qt::Keys
        // in the same data type. The maximum Unicode value
        // is 0x0010ffff, so we start our custom keys at
        // 0x01000000 to not clash with the Unicode values,
        // but still give plenty of room to grow.

        Key_Escape = 0x01000000,                // misc keys
        Key_Tab = 0x01000001,
        Key_Backtab = 0x01000002,
        Key_Backspace = 0x01000003,
        Key_Return = 0x01000004,
        Key_Enter = 0x01000005,
        Key_Insert = 0x01000006,
        Key_Delete = 0x01000007,
        Key_Pause = 0x01000008,
        Key_Print = 0x01000009,               // print screen
        Key_SysReq = 0x0100000a,
        Key_Clear = 0x0100000b,
        Key_Home = 0x01000010,                // cursor movement
        Key_End = 0x01000011,
        Key_Left = 0x01000012,
        Key_Up = 0x01000013,
        Key_Right = 0x01000014,
        Key_Down = 0x01000015,
        Key_PageUp = 0x01000016,
        Key_PageDown = 0x01000017,
        Key_Shift = 0x01000020,                // modifiers
        Key_Control = 0x01000021,
        Key_Meta = 0x01000022,
        Key_Alt = 0x01000023,
        Key_CapsLock = 0x01000024,
        Key_NumLock = 0x01000025,
        Key_ScrollLock = 0x01000026,
        Key_F1 = 0x01000030,                // function keys
        Key_F2 = 0x01000031,
        Key_F3 = 0x01000032,
        Key_F4 = 0x01000033,
        Key_F5 = 0x01000034,
        Key_F6 = 0x01000035,
        Key_F7 = 0x01000036,
        Key_F8 = 0x01000037,
        Key_F9 = 0x01000038,
        Key_F10 = 0x01000039,
        Key_F11 = 0x0100003a,
        Key_F12 = 0x0100003b,
        Key_F13 = 0x0100003c,
        Key_F14 = 0x0100003d,
        Key_F15 = 0x0100003e,
        Key_F16 = 0x0100003f,
        Key_F17 = 0x01000040,
        Key_F18 = 0x01000041,
        Key_F19 = 0x01000042,
        Key_F20 = 0x01000043,
        Key_F21 = 0x01000044,
        Key_F22 = 0x01000045,
        Key_F23 = 0x01000046,
        Key_F24 = 0x01000047,
        Key_F25 = 0x01000048,                // F25 .. F35 only on X11
        Key_F26 = 0x01000049,
        Key_F27 = 0x0100004a,
        Key_F28 = 0x0100004b,
        Key_F29 = 0x0100004c,
        Key_F30 = 0x0100004d,
        Key_F31 = 0x0100004e,
        Key_F32 = 0x0100004f,
        Key_F33 = 0x01000050,
        Key_F34 = 0x01000051,
        Key_F35 = 0x01000052,
        Key_Super_L = 0x01000053,                 // extra keys
        Key_Super_R = 0x01000054,
        Key_Menu = 0x01000055,
        Key_Hyper_L = 0x01000056,
        Key_Hyper_R = 0x01000057,
        Key_Help = 0x01000058,
        Key_Direction_L = 0x01000059,
        Key_Direction_R = 0x01000060,

        // International input method support (X keycode - 0xEE00, the
        // definition follows Qt/Embedded 2.3.7) Only interesting if
        // you are writing your own input method

        // International & multi-key character composition
        Key_AltGr               = 0x01001103,
        Key_Multi_key           = 0x01001120,  // Multi-key character compose
        Key_Codeinput           = 0x01001137,
        Key_SingleCandidate     = 0x0100113c,
        Key_MultipleCandidate   = 0x0100113d,
        Key_PreviousCandidate   = 0x0100113e,

        // Misc Functions
        Key_Mode_switch         = 0x0100117e,  // Character set switch
        //Key_script_switch       = 0x0100117e,  // Alias for mode_switch

        // Japanese keyboard support
        Key_Kanji               = 0x01001121,  // Kanji, Kanji convert
        Key_Muhenkan            = 0x01001122,  // Cancel Conversion
        //Key_Henkan_Mode         = 0x01001123,  // Start/Stop Conversion
        Key_Henkan              = 0x01001123,  // Alias for Henkan_Mode
        Key_Romaji              = 0x01001124,  // to Romaji
        Key_Hiragana            = 0x01001125,  // to Hiragana
        Key_Katakana            = 0x01001126,  // to Katakana
        Key_Hiragana_Katakana   = 0x01001127,  // Hiragana/Katakana toggle
        Key_Zenkaku             = 0x01001128,  // to Zenkaku
        Key_Hankaku             = 0x01001129,  // to Hankaku
        Key_Zenkaku_Hankaku     = 0x0100112a,  // Zenkaku/Hankaku toggle
        Key_Touroku             = 0x0100112b,  // Add to Dictionary
        Key_Massyo              = 0x0100112c,  // Delete from Dictionary
        Key_Kana_Lock           = 0x0100112d,  // Kana Lock
        Key_Kana_Shift          = 0x0100112e,  // Kana Shift
        Key_Eisu_Shift          = 0x0100112f,  // Alphanumeric Shift
        Key_Eisu_toggle         = 0x01001130,  // Alphanumeric toggle
        //Key_Kanji_Bangou        = 0x01001137,  // Codeinput
        //Key_Zen_Koho            = 0x0100113d,  // Multiple/All Candidate(s)
        //Key_Mae_Koho            = 0x0100113e,  // Previous Candidate

        // Korean keyboard support
        //
        // In fact, many Korean users need only 2 keys, Key_Hangul and
        // Key_Hangul_Hanja. But rest of the keys are good for future.

        Key_Hangul              = 0x01001131,  // Hangul start/stop(toggle)
        Key_Hangul_Start        = 0x01001132,  // Hangul start
        Key_Hangul_End          = 0x01001133,  // Hangul end, English start
        Key_Hangul_Hanja        = 0x01001134,  // Start Hangul->Hanja Conversion
        Key_Hangul_Jamo         = 0x01001135,  // Hangul Jamo mode
        Key_Hangul_Romaja       = 0x01001136,  // Hangul Romaja mode
        //Key_Hangul_Codeinput    = 0x01001137,  // Hangul code input mode
        Key_Hangul_Jeonja       = 0x01001138,  // Jeonja mode
        Key_Hangul_Banja        = 0x01001139,  // Banja mode
        Key_Hangul_PreHanja     = 0x0100113a,  // Pre Hanja conversion
        Key_Hangul_PostHanja    = 0x0100113b,  // Post Hanja conversion
        //Key_Hangul_SingleCandidate   = 0x0100113c,  // Single candidate
        //Key_Hangul_MultipleCandidate = 0x0100113d,  // Multiple candidate
        //Key_Hangul_PreviousCandidate = 0x0100113e,  // Previous candidate
        Key_Hangul_Special      = 0x0100113f,  // Special symbols
        //Key_Hangul_switch       = 0x0100117e,  // Alias for mode_switch

        // dead keys (X keycode - 0xED00 to avoid the conflict)
        Key_Dead_Grave          = 0x01001250,
        Key_Dead_Acute          = 0x01001251,
        Key_Dead_Circumflex     = 0x01001252,
        Key_Dead_Tilde          = 0x01001253,
        Key_Dead_Macron         = 0x01001254,
        Key_Dead_Breve          = 0x01001255,
        Key_Dead_Abovedot       = 0x01001256,
        Key_Dead_Diaeresis      = 0x01001257,
        Key_Dead_Abovering      = 0x01001258,
        Key_Dead_Doubleacute    = 0x01001259,
        Key_Dead_Caron          = 0x0100125a,
        Key_Dead_Cedilla        = 0x0100125b,
        Key_Dead_Ogonek         = 0x0100125c,
        Key_Dead_Iota           = 0x0100125d,
        Key_Dead_Voiced_Sound   = 0x0100125e,
        Key_Dead_Semivoiced_Sound = 0x0100125f,
        Key_Dead_Belowdot       = 0x01001260,
        Key_Dead_Hook           = 0x01001261,
        Key_Dead_Horn           = 0x01001262,
        Key_Dead_Stroke         = 0x01001263,
        Key_Dead_Abovecomma     = 0x01001264,
        Key_Dead_Abovereversedcomma = 0x01001265,
        Key_Dead_Doublegrave    = 0x01001266,
        Key_Dead_Belowring      = 0x01001267,
        Key_Dead_Belowmacron    = 0x01001268,
        Key_Dead_Belowcircumflex = 0x01001269,
        Key_Dead_Belowtilde     = 0x0100126a,
        Key_Dead_Belowbreve     = 0x0100126b,
        Key_Dead_Belowdiaeresis = 0x0100126c,
        Key_Dead_Invertedbreve  = 0x0100126d,
        Key_Dead_Belowcomma     = 0x0100126e,
        Key_Dead_Currency       = 0x0100126f,
        Key_Dead_a              = 0x01001280,
        Key_Dead_A              = 0x01001281,
        Key_Dead_e              = 0x01001282,
        Key_Dead_E              = 0x01001283,
        Key_Dead_i              = 0x01001284,
        Key_Dead_I              = 0x01001285,
        Key_Dead_o              = 0x01001286,
        Key_Dead_O              = 0x01001287,
        Key_Dead_u              = 0x01001288,
        Key_Dead_U              = 0x01001289,
        Key_Dead_Small_Schwa    = 0x0100128a,
        Key_Dead_Capital_Schwa  = 0x0100128b,
        Key_Dead_Greek          = 0x0100128c,
        Key_Dead_Lowline        = 0x01001290,
        Key_Dead_Aboveverticalline = 0x01001291,
        Key_Dead_Belowverticalline = 0x01001292,
        Key_Dead_Longsolidusoverlay = 0x01001293,

        // multimedia/internet keys - ignored by default - see QKeyEvent c'tor
        Key_Back  = 0x01000061,
        Key_Forward  = 0x01000062,
        Key_Stop  = 0x01000063,
        Key_Refresh  = 0x01000064,
        Key_VolumeDown = 0x01000070,
        Key_VolumeMute  = 0x01000071,
        Key_VolumeUp = 0x01000072,
        Key_BassBoost = 0x01000073,
        Key_BassUp = 0x01000074,
        Key_BassDown = 0x01000075,
        Key_TrebleUp = 0x01000076,
        Key_TrebleDown = 0x01000077,
        Key_MediaPlay  = 0x01000080,
        Key_MediaStop  = 0x01000081,
        Key_MediaPrevious  = 0x01000082,
        Key_MediaNext  = 0x01000083,
        Key_MediaRecord = 0x01000084,
        Key_MediaPause = 0x01000085,
        Key_MediaTogglePlayPause = 0x01000086,
        Key_HomePage  = 0x01000090,
        Key_Favorites  = 0x01000091,
        Key_Search  = 0x01000092,
        Key_Standby = 0x01000093,
        Key_OpenUrl = 0x01000094,
        Key_LaunchMail  = 0x010000a0,
        Key_LaunchMedia = 0x010000a1,
        Key_Launch0  = 0x010000a2,
        Key_Launch1  = 0x010000a3,
        Key_Launch2  = 0x010000a4,
        Key_Launch3  = 0x010000a5,
        Key_Launch4  = 0x010000a6,
        Key_Launch5  = 0x010000a7,
        Key_Launch6  = 0x010000a8,
        Key_Launch7  = 0x010000a9,
        Key_Launch8  = 0x010000aa,
        Key_Launch9  = 0x010000ab,
        Key_LaunchA  = 0x010000ac,
        Key_LaunchB  = 0x010000ad,
        Key_LaunchC  = 0x010000ae,
        Key_LaunchD  = 0x010000af,
        Key_LaunchE  = 0x010000b0,
        Key_LaunchF  = 0x010000b1,
        Key_MonBrightnessUp = 0x010000b2,
        Key_MonBrightnessDown = 0x010000b3,
        Key_KeyboardLightOnOff = 0x010000b4,
        Key_KeyboardBrightnessUp = 0x010000b5,
        Key_KeyboardBrightnessDown = 0x010000b6,
        Key_PowerOff = 0x010000b7,
        Key_WakeUp = 0x010000b8,
        Key_Eject = 0x010000b9,
        Key_ScreenSaver = 0x010000ba,
        Key_WWW = 0x010000bb,
        Key_Memo = 0x010000bc,
        Key_LightBulb = 0x010000bd,
        Key_Shop = 0x010000be,
        Key_History = 0x010000bf,
        Key_AddFavorite = 0x010000c0,
        Key_HotLinks = 0x010000c1,
        Key_BrightnessAdjust = 0x010000c2,
        Key_Finance = 0x010000c3,
        Key_Community = 0x010000c4,
        Key_AudioRewind = 0x010000c5, // Media rewind
        Key_BackForward = 0x010000c6,
        Key_ApplicationLeft = 0x010000c7,
        Key_ApplicationRight = 0x010000c8,
        Key_Book = 0x010000c9,
        Key_CD = 0x010000ca,
        Key_Calculator = 0x010000cb,
        Key_ToDoList = 0x010000cc,
        Key_ClearGrab = 0x010000cd,
        Key_Close = 0x010000ce,
        Key_Copy = 0x010000cf,
        Key_Cut = 0x010000d0,
        Key_Display = 0x010000d1, // Output switch key
        Key_DOS = 0x010000d2,
        Key_Documents = 0x010000d3,
        Key_Excel = 0x010000d4,
        Key_Explorer = 0x010000d5,
        Key_Game = 0x010000d6,
        Key_Go = 0x010000d7,
        Key_iTouch = 0x010000d8,
        Key_LogOff = 0x010000d9,
        Key_Market = 0x010000da,
        Key_Meeting = 0x010000db,
        Key_MenuKB = 0x010000dc,
        Key_MenuPB = 0x010000dd,
        Key_MySites = 0x010000de,
        Key_News = 0x010000df,
        Key_OfficeHome = 0x010000e0,
        Key_Option = 0x010000e1,
        Key_Paste = 0x010000e2,
        Key_Phone = 0x010000e3,
        Key_Calendar = 0x010000e4,
        Key_Reply = 0x010000e5,
        Key_Reload = 0x010000e6,
        Key_RotateWindows = 0x010000e7,
        Key_RotationPB = 0x010000e8,
        Key_RotationKB = 0x010000e9,
        Key_Save = 0x010000ea,
        Key_Send = 0x010000eb,
        Key_Spell = 0x010000ec,
        Key_SplitScreen = 0x010000ed,
        Key_Support = 0x010000ee,
        Key_TaskPane = 0x010000ef,
        Key_Terminal = 0x010000f0,
        Key_Tools = 0x010000f1,
        Key_Travel = 0x010000f2,
        Key_Video = 0x010000f3,
        Key_Word = 0x010000f4,
        Key_Xfer = 0x010000f5,
        Key_ZoomIn = 0x010000f6,
        Key_ZoomOut = 0x010000f7,
        Key_Away = 0x010000f8,
        Key_Messenger = 0x010000f9,
        Key_WebCam = 0x010000fa,
        Key_MailForward = 0x010000fb,
        Key_Pictures = 0x010000fc,
        Key_Music = 0x010000fd,
        Key_Battery = 0x010000fe,
        Key_Bluetooth = 0x010000ff,
        Key_WLAN = 0x01000100,
        Key_UWB = 0x01000101,
        Key_AudioForward = 0x01000102, // Media fast-forward
        Key_AudioRepeat = 0x01000103, // Toggle repeat mode
        Key_AudioRandomPlay = 0x01000104, // Toggle shuffle mode
        Key_Subtitle = 0x01000105,
        Key_AudioCycleTrack = 0x01000106,
        Key_Time = 0x01000107,
        Key_Hibernate = 0x01000108,
        Key_View = 0x01000109,
        Key_TopMenu = 0x0100010a,
        Key_PowerDown = 0x0100010b,
        Key_Suspend = 0x0100010c,
        Key_ContrastAdjust = 0x0100010d,

        // We can remove these two for Qt 7:
        Key_LaunchG  = 0x0100010e,
        Key_LaunchH  = 0x0100010f,

        Key_TouchpadToggle = 0x01000110,
        Key_TouchpadOn = 0x01000111,
        Key_TouchpadOff = 0x01000112,

        Key_MicMute = 0x01000113,

        Key_Red = 0x01000114,
        Key_Green = 0x01000115,
        Key_Yellow = 0x01000116,
        Key_Blue = 0x01000117,

        Key_ChannelUp = 0x01000118,
        Key_ChannelDown = 0x01000119,

        Key_Guide    = 0x0100011a,
        Key_Info     = 0x0100011b,
        Key_Settings = 0x0100011c,

        Key_MicVolumeUp   = 0x0100011d,
        Key_MicVolumeDown = 0x0100011e,

        Key_New      = 0x01000120,
        Key_Open     = 0x01000121,
        Key_Find     = 0x01000122,
        Key_Undo     = 0x01000123,
        Key_Redo     = 0x01000124,

        Key_MediaLast = 0x0100ffff,

        // Keypad navigation keys
        Key_Select = 0x01010000,
        Key_Yes = 0x01010001,
        Key_No = 0x01010002,

        // Newer misc keys
        Key_Cancel  = 0x01020001,
        Key_Printer = 0x01020002,
        Key_Execute = 0x01020003,
        Key_Sleep   = 0x01020004,
        Key_Play    = 0x01020005, // Not the same as Key_MediaPlay
        Key_Zoom    = 0x01020006,
        //Key_Jisho   = 0x01020007, // IME: Dictionary key
        //Key_Oyayubi_Left = 0x01020008, // IME: Left Oyayubi key
        //Key_Oyayubi_Right = 0x01020009, // IME: Right Oyayubi key
        Key_Exit    = 0x0102000a,

        // Device keys
        Key_Context1 = 0x01100000,
        Key_Context2 = 0x01100001,
        Key_Context3 = 0x01100002,
        Key_Context4 = 0x01100003,
        Key_Call = 0x01100004,      // set absolute state to in a call (do not toggle state)
        Key_Hangup = 0x01100005,    // set absolute state to hang up (do not toggle state)
        Key_Flip = 0x01100006,
        Key_ToggleCallHangup = 0x01100007, // a toggle key for answering, or hanging up, based on current call state
        Key_VoiceDial = 0x01100008,
        Key_LastNumberRedial = 0x01100009,

        Key_Camera = 0x01100020,
        Key_CameraFocus = 0x01100021,

        // WARNING: Do not add any keys in the range 0x01200000 to 0xffffffff,
        // as those bits are reserved for the Qt::KeyboardModifier enum below.

        Key_unknown = 0x01ffffff
    };

(4) KeyboardModifier 与 Modifier ,源码显示,这俩类的含义是一样的 ,后者是前者的简写形式

    //This enum describes the modifier keys.
    //Note: On Windows Keyboards,
    //  Qt::MetaModifier and Qt::Key_Meta are mapped to the Windows key.
    enum KeyboardModifier {
        NoModifier           = 0x00000000, //No modifier key is pressed.
        ShiftModifier        = 0x02000000, //A Shift key on the keyboard is pressed.
        ControlModifier      = 0x04000000, //A Ctrl  key on the keyboard is pressed.
        AltModifier          = 0x08000000, //An Alt  key on the keyboard is pressed.
        MetaModifier         = 0x10000000, //A Meta  key on the keyboard is pressed.
        KeypadModifier       = 0x20000000, //A keypad button is pressed.
        GroupSwitchModifier  = 0x40000000, //X11 only (unless activated on Windows by a
                //command line argument). A Mode_switch key on the keyboard is pressed.

        // Do not extend the mask to include 0x01000000
        KeyboardModifierMask = 0xfe000000
    };
    Q_DECLARE_FLAGS(KeyboardModifiers, KeyboardModifier)
    Q_DECLARE_OPERATORS_FOR_FLAGS(KeyboardModifiers)

    //shorter names for shortcuts。
    //取值来自于上面的 KeyboardModifier枚举类,但枚举名变短了
    // The use of all-caps identifiers has the potential for clashing with
    // user-defined or third-party macros. More so when the identifiers are not
    // "namespace"-prefixed. This is considered bad practice and is why
    // KeypadModifier was not added to the Modifier enum.
    // ### Qt 7: consider deprecating in favor of KeyboardModifier.
    enum Modifier {
        META          = Qt::MetaModifier,
        SHIFT         = Qt::ShiftModifier,
        CTRL          = Qt::ControlModifier,
        ALT           = Qt::AltModifier,
        MODIFIER_MASK = KeyboardModifierMask,
    };
    Q_DECLARE_FLAGS(Modifiers, Modifier)
    Q_DECLARE_OPERATORS_FOR_FLAGS(Modifiers)

(5)

(6)

谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangzhangkeji

谢谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值