⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qkbdsl5000_qws.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    {        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 + -