📄 qkbdsl5000_qws.cpp
字号:
{ Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 6f { Qt::Key_NumLock, 0xffff , 0xffff , 0xffff }, // 70 { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 71 { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 72 { 0x20ac, 0xffff , 0x20ac , 0x20ac }, // 73 Euro sign { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 74 { Qt::Key_F32, 0xffff , 0xffff , 0xffff }, // 75 Sync { 0, 0xffff , 0xffff , 0xffff }};static const int keyMSize = sizeof(sl5000KeyMap)/sizeof(QWSKeyMap)-1;QWSSL5000KeyboardHandler::QWSSL5000KeyboardHandler(const QString &device) : QWSTtyKeyboardHandler(device){ meta = false; fn = false; numLock = false; sharp_kbdctl_modifstat st; int dev = ::open(device.isEmpty()?"/dev/sharp_kbdctl":device.toLocal8Bit().constData(), O_RDWR); if (dev >= 0) { memset(&st, 0, sizeof(st)); st.which = 3; int ret = ioctl(dev, SHARP_KBDCTL_GETMODIFSTAT, (char*)&st); if(!ret) numLock = (bool)st.stat; ::close(dev); }}QWSSL5000KeyboardHandler::~QWSSL5000KeyboardHandler(){}const QWSKeyMap *QWSSL5000KeyboardHandler::keyMap() const{ return sl5000KeyMap;}void QWSSL5000KeyboardHandler::doKey(uchar code){ int keyCode = Qt::Key_unknown; bool release = false; if (code & 0x80) { release = true; code &= 0x7f; } if (fn && !meta && (code >= 0x42 && code <= 0x52)) { ushort unicode=0; int scan=0; if (code == 0x42) { unicode='X'-'@'; scan=Qt::Key_X; } // Cut else if (code == 0x43) { unicode='C'-'@'; scan=Qt::Key_C; } // Copy else if (code == 0x44) { unicode='V'-'@'; scan=Qt::Key_V; } // Paste else if (code == 0x52) { unicode='Z'-'@'; scan=Qt::Key_Z; } // Undo if (scan) { processKeyEvent(unicode, scan, Qt::ControlModifier, !release, false); return; } } if (code < keyMSize) { keyCode = keyMap()[code].key_code; } bool repeatable = true; if (release && (keyCode == Qt::Key_F34 || keyCode == Qt::Key_F35)) return; // no release for power and light keys if (keyCode >= Qt::Key_F1 && keyCode <= Qt::Key_F35 || keyCode == Qt::Key_Escape || keyCode == Qt::Key_Home || keyCode == Qt::Key_Shift || keyCode == Qt::Key_Meta) repeatable = false; if (qt_screen->isTransformed() && keyCode >= Qt::Key_Left && keyCode <= Qt::Key_Down) { keyCode = transformDirKey(keyCode); } // Ctrl-Alt-Delete exits qws if (ctrl && alt && keyCode == Qt::Key_Delete) { qApp->quit(); } if (keyCode == Qt::Key_F22) { /* Fn key */ fn = !release; } else if (keyCode == Qt::Key_NumLock) { if (release) numLock = !numLock; } else if (keyCode == Qt::AltModifier) { alt = !release; } else if (keyCode == Qt::ControlModifier) { ctrl = !release; } else if (keyCode == Qt::ShiftModifier) { shift = !release; } else if (keyCode == Qt::MetaModifier) { meta = !release; } else if (keyCode == Qt::Key_CapsLock && release) { caps = !caps; } if (keyCode != Qt::Key_unknown) { bool bAlt = alt; bool bCtrl = ctrl; bool bShift = shift; int unicode = 0; if (code < keyMSize) { bool bCaps = caps ^ shift; if (fn) { if (shift) { bCaps = bShift = false; bCtrl = true; } if (meta) { bCaps = bShift = true; bAlt = true; } } else if (meta) { bCaps = bShift = true; } if (code > 40 && caps) { // fn-keys should only react to shift, not caps bCaps = bShift = shift; } if (numLock) { if (keyCode != Qt::Key_Space && keyCode != Qt::Key_Tab) bCaps = bShift = false; } if (keyCode == Qt::Key_Delete && (bAlt || bCtrl)) { keyCode = Qt::Key_BraceLeft; unicode = '['; bCaps = bShift = bAlt = bCtrl = false; } else if (keyCode == Qt::Key_F31 && bCtrl) { keyCode = Qt::Key_QuoteLeft; unicode = '`'; } else if (bCtrl) unicode = keyMap()[code].ctrl_unicode ? keyMap()[code].ctrl_unicode : 0xffff; else if (bCaps) unicode = keyMap()[code].shift_unicode ? keyMap()[code].shift_unicode : 0xffff; else unicode = keyMap()[code].unicode ? keyMap()[code].unicode : 0xffff; } modifiers = 0; if (bAlt) modifiers |= Qt::AltModifier; if (bCtrl) modifiers |= Qt::ControlModifier; if (bShift) modifiers |= Qt::ShiftModifier; // looks wrong -- WWA bool repeat = false; if (prevuni == unicode && prevkey == keyCode && !release) repeat = true; processKeyEvent(unicode, keyCode, modifiers, !release, repeat); if (!release) { prevuni = unicode; prevkey = keyCode; } else { prevkey = prevuni = 0; } } if (repeatable && !release) beginAutoRepeat(prevuni, prevkey, modifiers); else endAutoRepeat();}#endif // QT_NO_QWS_KBD_SL5000
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -