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

📄 qkeyboard_qws.cpp

📁 键盘驱动程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/****************************************************************************** $Id: qt/src/kernel/qkeyboard_qws.cpp   2.3.6   edited 2003-05-12 $**** Implementation of Qt/Embedded keyboard drivers**** Created : 991025**** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.**** This file is part of the kernel module of the Qt GUI Toolkit.**** This file may be distributed and/or modified under the terms of the** GNU General Public License version 2 as published by the Free Software** Foundation and appearing in the file LICENSE.GPL included in the** packaging of this file.**** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition** licenses for Qt/Embedded may use this file in accordance with the** Qt Embedded Commercial License Agreement provided with the Software.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.**** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for**   information about Qt Commercial License Agreements.** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/// 增加了对SEUIC HPC 键盘的支持 2003.09.3 caoyang (需要增加宏 QT_QWS_HPC )// 问题单号: D0184#include "qwindowsystem_qws.h"#include "qwsutils_qws.h"#include "qgfx_qws.h"#include <qapplication.h>#include <qsocketnotifier.h>#include <qnamespace.h>#include <qtimer.h>#include <stdlib.h>#include <stdio.h>#include <ctype.h>#include <unistd.h>#ifdef _OS_LINUX_#include <linux/kd.h>#endif#include <sys/ioctl.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <errno.h>#include <signal.h>#include <termios.h>#include <unistd.h>#include <sys/ioctl.h>#ifndef QT_NO_QWS_KEYBOARD#ifdef QT_QWS_YOPY#include <qwidgetlist.h>#include <linux/kd.h>#include <linux/fb.h>#include <linux/yopy_button.h>extern "C" {    int getpgid(int);}#endif//A by caoyang for D0184 at 2003.09.3 begin#ifdef QT_QWS_HPC#include <qwidgetlist.h>#include <linux/kd.h>#include <linux/fb.h>extern "C" {    int getpgid(int);}#endif//A by caoyang for D0184 at 2003.09.3 end#if !defined(_OS_QNX6_)#include <termios.h>#if !defined(_OS_FREEBSD_) && !defined(_OS_SOLARIS_)#include <sys/kd.h>#include <sys/vt.h>#endif#ifdef QT_QWS_SL5XXX#include <asm/sharp_char.h>#endif#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX)static int dir_keyrot = -1;static int xform_dirkey(int key){    if (dir_keyrot < 0) {	// get the rotation	char *kerot = getenv("QWS_CURSOR_ROTATION");	if (kerot) {	    if (strcmp(kerot, "90") == 0)		dir_keyrot = 1;	    else if (strcmp(kerot, "180") == 0)		dir_keyrot = 2;	    else if (strcmp(kerot, "270") == 0)		dir_keyrot = 3;	    else		dir_keyrot = 0;	} else {	    dir_keyrot = 0;	}    }    int xf = qt_screen->transformOrientation() + dir_keyrot;    return (key-Qt::Key_Left+xf)%4+Qt::Key_Left;}#endif#define VTSWITCHSIG SIGUSR2static bool vtActive = true;static int  vtQws = 0;static int  kbdFD = -1;class QWSyopyButtonsHandler : public QWSKeyboardHandler{    Q_OBJECTpublic:    QWSyopyButtonsHandler();    virtual ~QWSyopyButtonsHandler();    bool isOpen() { return buttonFD > 0; }private slots:    void readKeyboardData();private:    QString terminalName;    int buttonFD;    struct termios newT, oldT;    QSocketNotifier *notifier;};#endif // QNX6#ifdef QT_QWS_SL5XXXstatic const QWSServer::KeyMap keyM[] = {    {	Qt::Key_unknown,	0xffff  , 0xffff  , 0xffff  }, // 00    {	Qt::Key_A,		'a'     , 'A'     , 'A'-64  }, // 01    {	Qt::Key_B,		'b'     , 'B'     , 'B'-64  }, // 02    {	Qt::Key_C,		'c'     , 'C'     , 'C'-64  }, // 03    {	Qt::Key_D,		'd'     , 'D'     , 'D'-64  }, // 04    {	Qt::Key_E,		'e'     , 'E'     , 'E'-64  }, // 05    {	Qt::Key_F,		'f'     , 'F'     , 'F'-64  }, // 06    {	Qt::Key_G,		'g'     , 'G'     , 'G'-64  }, // 07    {	Qt::Key_H,		'h'     , 'H'     , 'H'-64  }, // 08    {	Qt::Key_I,		'i'     , 'I'     , 'I'-64  }, // 09    {	Qt::Key_J,		'j'     , 'J'     , 'J'-64  }, // 0a 10    {	Qt::Key_K,		'k'     , 'K'     , 'K'-64  }, // 0b    {	Qt::Key_L,		'l'     , 'L'     , 'L'-64  }, // 0c    {	Qt::Key_M,		'm'     , 'M'     , 'M'-64  }, // 0d    {	Qt::Key_N,		'n'     , 'N'     , 'N'-64  }, // 0e    {	Qt::Key_O,		'o'     , 'O'     , 'O'-64  }, // 0f    {	Qt::Key_P,		'p'     , 'P'     , 'P'-64  }, // 10    {	Qt::Key_Q,		'q'     , 'Q'     , 'Q'-64  }, // 11    {	Qt::Key_R,		'r'     , 'R'     , 'R'-64  }, // 12    {	Qt::Key_S,		's'     , 'S'     , 'S'-64  }, // 13    {	Qt::Key_T,		't'     , 'T'     , 'T'-64  }, // 14 20    {	Qt::Key_U,		'u'     , 'U'     , 'U'-64  }, // 15    {	Qt::Key_V,		'v'     , 'V'     , 'V'-64  }, // 16    {	Qt::Key_W,		'w'     , 'W'     , 'W'-64  }, // 17    {	Qt::Key_X,		'x'     , 'X'     , 'X'-64  }, // 18    {	Qt::Key_Y,		'y'     , 'Y'     , 'Y'-64  }, // 19    {	Qt::Key_Z,		'z'     , 'Z'     , 'Z'-64  }, // 1a    {	Qt::Key_Shift,		0xffff  , 0xffff  , 0xffff  }, // 1b    {	Qt::Key_Return,		13      , 13      , 0xffff  }, // 1c    {	Qt::Key_F11,	        0xffff  , 0xffff  , 0xffff  }, // 1d todo    {	Qt::Key_F22,		0xffff  , 0xffff  , 0xffff  }, // 1e 30    {	Qt::Key_Backspace,	8       , 8       , 0xffff  }, // 1f    {	Qt::Key_F31,		0xffff  , 0xffff  , 0xffff  }, // 20    {	Qt::Key_F35,		0xffff  , 0xffff  , 0xffff  }, // 21 light    {	Qt::Key_Escape,		0xffff  , 0xffff  , 0xffff  }, // 22    // Direction key code are for *UNROTATED* display.    {	Qt::Key_Up,		0xffff  , 0xffff  , 0xffff  }, // 23    {	Qt::Key_Right,		0xffff  , 0xffff  , 0xffff  }, // 24    {	Qt::Key_Left,		0xffff  , 0xffff  , 0xffff  }, // 25    {	Qt::Key_Down,		0xffff  , 0xffff  , 0xffff  }, // 26    {	Qt::Key_F33,		0xffff  , 0xffff  , 0xffff  }, // 27 OK    {	Qt::Key_F12,		0xffff  , 0xffff  , 0xffff  }, // 28 40 home    {	Qt::Key_1,		'1'     , 'q'     , 'Q'-64  }, // 29    {	Qt::Key_2,		'2'     , 'w'     , 'W'-64  }, // 2a    {	Qt::Key_3,		'3'     , 'e'     , 'E'-64  }, // 2b    {	Qt::Key_4,		'4'     , 'r'     , 'R'-64  }, // 2c    {	Qt::Key_5,		'5'     , 't'     , 'T'-64  }, // 2d    {	Qt::Key_6,		'6'     , 'y'     , 'Y'-64  }, // 2e    {	Qt::Key_7,		'7'     , 'u'     , 'U'-64  }, // 2f    {	Qt::Key_8,		'8'     , 'i'     , 'I'-64  }, // 30    {	Qt::Key_9,		'9'     , 'o'     , 'O'-64  }, // 31    {	Qt::Key_0,		'0'     , 'p'     , 'P'-64  }, // 32 50    {	Qt::Key_unknown,	0xffff  , 0xffff  , 0xffff  }, // 33    {	Qt::Key_unknown,	0xffff  , 0xffff  , 0xffff  }, // 34    {	Qt::Key_unknown,	0xffff  , 0xffff  , 0xffff  }, // 35    {	Qt::Key_unknown,	0xffff  , 0xffff  , 0xffff  }, // 36    {	Qt::Key_unknown,	0xffff  , 0xffff  , 0xffff  }, // 37    {	Qt::Key_unknown,	0xffff  , 0xffff  , 0xffff  }, // 38    {	Qt::Key_unknown,	0xffff  , 0xffff  , 0xffff  }, // 39    {	Qt::Key_Minus,		'-'     , 'b'     , 'B'-64  }, // 3a    {	Qt::Key_Plus,		'+'     , 'n'     , 'N'-64  }, // 3b    {	Qt::Key_CapsLock,	0xffff  , 0xffff  , 0xffff  }, // 3c 60    {	Qt::Key_At,		'@'     , 's'     , 'S'-64  }, // 3d    {	Qt::Key_Question,	'?'     , '?'     , 0xffff  }, // 3e    {	Qt::Key_Comma,		','     , ','     , 0xffff  }, // 3f    {	Qt::Key_Period,		'.'     , '.'     , 0xffff  }, // 40    {	Qt::Key_Tab,		9       , '\\'    , 0xffff  }, // 41    {	Qt::Key_X,		0xffff 	, 'x'  	  , 'X'-64  }, // 42    {	Qt::Key_C,		0xffff 	, 'c'     , 'C'-64  }, // 43    {	Qt::Key_V,		0xffff 	, 'v'     , 'V'-64  }, // 44    {	Qt::Key_Slash,		'/'     , '/'     , 0xffff  }, // 45    {	Qt::Key_Apostrophe,	'\''    , '\''    , 0xffff  }, // 46 70    {	Qt::Key_Semicolon,	';'     , ';'     , 0xffff  }, // 47    {	Qt::Key_QuoteDbl,	'\"'    , '\"'    , 0xffff  }, // 48    {	Qt::Key_Colon,		':'     , ':'     , 0xffff  }, // 49    {	Qt::Key_NumberSign,	'#'     , 'd'     , 'D'-64  }, // 4a    {	Qt::Key_Dollar,		'$'     , 'f'     , 'F'-64  }, // 4b    {	Qt::Key_Percent,	'%'     , 'g'     , 'G'-64  }, // 4c    {	Qt::Key_Underscore,	'_'     , 'h'     , 'H'-64  }, // 4d    {	Qt::Key_Ampersand,	'&'     , 'j'     , 'J'-64  }, // 4e    {	Qt::Key_Asterisk,	'*'     , 'k'     , 'K'-64  }, // 4f    {	Qt::Key_ParenLeft,	'('     , 'l'     , 'L'-64  }, // 50 80    {	Qt::Key_Delete,		'['     , '['     , '['     }, // 51    {	Qt::Key_Z,		0xffff 	, 'z'     , 'Z'-64  }, // 52    {	Qt::Key_Equal,		'='     , 'm'     , 'M'-64  }, // 53    {	Qt::Key_ParenRight,	')'     , ']'     , ']'     }, // 54    {	Qt::Key_AsciiTilde,	'~'     , '^'     , '^'     }, // 55    {	Qt::Key_Less,		'<'     , '{'     , '{'     }, // 56    {	Qt::Key_Greater,	'>'     , '}'     , '}'     }, // 57    {	Qt::Key_F9,		0xffff  , 0xffff  , 0xffff  }, // 58 datebook    {	Qt::Key_F10,		0xffff  , 0xffff  , 0xffff  }, // 59 address    {	Qt::Key_F13,	        0xffff  , 0xffff  , 0xffff  }, // 5a 90 email    {	Qt::Key_F30,		' '      , ' '    , 0xffff  }, // 5b select    {	Qt::Key_Space,		' '     , '|'     , '`'     }, // 5c    {	Qt::Key_unknown,	0xffff  , 0xffff  , 0xffff  }, // 5d    {	Qt::Key_Exclam,		'!'     , 'a'     , 'A'-64  }, // 5e    {	Qt::Key_unknown,	0xffff  , 0xffff  , 0xffff  }, // 5f    {	Qt::Key_unknown,	0xffff  , 0xffff  , 0xffff  }, // 60    {	Qt::Key_unknown,	0xffff  , 0xffff  , 0xffff  }, // 61    {	Qt::Key_unknown,	0xffff  , 0xffff  , 0xffff  }, // 62    {	Qt::Key_unknown,	0xffff  , 0xffff  , 0xffff  }, // 63    {	Qt::Key_unknown,	0xffff  , 0xffff  , 0xffff  }, // 64    {	Qt::Key_unknown,	0xffff  , 0xffff  , 0xffff  }, // 65    {	Qt::Key_unknown,	0xffff  , 0xffff  , 0xffff  }, // 66    {	Qt::Key_Meta,		0xffff  , 0xffff  , 0xffff  }, // 67    {	Qt::Key_unknown,	0xffff  , 0xffff  , 0xffff  }, // 68    {	Qt::Key_unknown,	0xffff  , 0xffff  , 0xffff  }, // 69    {	Qt::Key_unknown,	0xffff  , 0xffff  , 0xffff  }, // 6a    {	Qt::Key_unknown,	0xffff  , 0xffff  , 0xffff  }, // 6b    {	Qt::Key_unknown,	0xffff  , 0xffff  , 0xffff  }, // 6c    {	Qt::Key_F34,		0xffff  , 0xffff  , 0xffff  }, // 6d power    {	Qt::Key_F13,		0xffff  , 0xffff  , 0xffff  }, // 6e mail long    {	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  }};#else// Standard PC101static const QWSServer::KeyMap keyM[] = {    {   Qt::Key_unknown,    0xffff  , 0xffff  , 0xffff  },    {   Qt::Key_Escape,     27      , 27      , 0xffff  },    {   Qt::Key_1,      '1'     , '!'     , 0xffff  },    {   Qt::Key_2,      '2'     , '@'     , 0xffff  },    {   Qt::Key_3,      '3'     , '#'     , 0xffff  },    {   Qt::Key_4,      '4'     , '$'     , 0xffff  },    {   Qt::Key_5,      '5'     , '%'     , 0xffff  },    {   Qt::Key_6,      '6'     , '^'     , 0xffff  },    {   Qt::Key_7,      '7'     , '&'     , 0xffff  },    {   Qt::Key_8,      '8'     , '*'     , 0xffff  },    {   Qt::Key_9,      '9'     , '('     , 0xffff  },  // 10    {   Qt::Key_0,      '0'     , ')'     , 0xffff  },    {   Qt::Key_Minus,      '-'     , '_'     , 0xffff  },    {   Qt::Key_Equal,      '='     , '+'     , 0xffff  },    {   Qt::Key_Backspace,  8       , 8       , 0xffff  },    {   Qt::Key_Tab,        9       , 9       , 0xffff  },    {   Qt::Key_Q,      'q'     , 'Q'     , 'Q'-64  },    {   Qt::Key_W,      'w'     , 'W'     , 'W'-64  },    {   Qt::Key_E,      'e'     , 'E'     , 'E'-64  },    {   Qt::Key_R,      'r'     , 'R'     , 'R'-64  },    {   Qt::Key_T,      't'     , 'T'     , 'T'-64  },  // 20    {   Qt::Key_Y,      'y'     , 'Y'     , 'Y'-64  },    {   Qt::Key_U,      'u'     , 'U'     , 'U'-64  },    {   Qt::Key_I,      'i'     , 'I'     , 'I'-64  },    {   Qt::Key_O,      'o'     , 'O'     , 'O'-64  },    {   Qt::Key_P,      'p'     , 'P'     , 'P'-64  },    {   Qt::Key_BraceLeft,  '['     , '{'     , 0xffff  },    {   Qt::Key_BraceRight, ']'     , '}'     , 0xffff  },    {   Qt::Key_Return,     13      , 13      , 0xffff  },    {   Qt::Key_Control,    0xffff  , 0xffff  , 0xffff  },    {   Qt::Key_A,      'a'     , 'A'     , 'A'-64  },  // 30    {   Qt::Key_S,      's'     , 'S'     , 'S'-64  },    {   Qt::Key_D,      'd'     , 'D'     , 'D'-64  },    {   Qt::Key_F,      'f'     , 'F'     , 'F'-64  },    {   Qt::Key_G,      'g'     , 'G'     , 'G'-64  },    {   Qt::Key_H,      'h'     , 'H'     , 'H'-64  },    {   Qt::Key_J,      'j'     , 'J'     , 'J'-64  },    {   Qt::Key_K,      'k'     , 'K'     , 'K'-64  },    {   Qt::Key_L,      'l'     , 'L'     , 'L'-64  },    {   Qt::Key_Semicolon,  ';'     , ':'     , 0xffff  },    {   Qt::Key_Apostrophe, '\''    , '"'     , 0xffff  },  // 40    {   Qt::Key_QuoteLeft,  '`'     , '~'     , 0xffff  },    {   Qt::Key_Shift,      0xffff  , 0xffff  , 0xffff  },    {   Qt::Key_Backslash,  '\\'    , '|'     , 0xffff  },    {   Qt::Key_Z,      'z'     , 'Z'     , 'Z'-64  },    {   Qt::Key_X,      'x'     , 'X'     , 'X'-64  },    {   Qt::Key_C,      'c'     , 'C'     , 'C'-64  },    {   Qt::Key_V,      'v'     , 'V'     , 'V'-64  },    {   Qt::Key_B,      'b'     , 'B'     , 'B'-64  },    {   Qt::Key_N,      'n'     , 'N'     , 'N'-64  },    {   Qt::Key_M,      'm'     , 'M'     , 'M'-64  },  // 50    {   Qt::Key_Comma,      ','     , '<'     , 0xffff  },    {   Qt::Key_Period,     '.'     , '>'     , 0xffff  },    {   Qt::Key_Slash,      '/'     , '?'     , 0xffff  },    {   Qt::Key_Shift,      0xffff  , 0xffff  , 0xffff  },    {   Qt::Key_Asterisk,   '*'     , '*'     , 0xffff  },    {   Qt::Key_Alt,        0xffff  , 0xffff  , 0xffff  },    {   Qt::Key_Space,      ' '     , ' '     , 0xffff  },    {   Qt::Key_CapsLock,   0xffff  , 0xffff  , 0xffff  },    {   Qt::Key_F1,     0xffff  , 0xffff  , 0xffff  },    {   Qt::Key_F2,     0xffff  , 0xffff  , 0xffff  },  // 60    {   Qt::Key_F3,     0xffff  , 0xffff  , 0xffff  },    {   Qt::Key_F4,     0xffff  , 0xffff  , 0xffff  },    {   Qt::Key_F5,     0xffff  , 0xffff  , 0xffff  },    {   Qt::Key_F6,     0xffff  , 0xffff  , 0xffff  },    {   Qt::Key_F7,     0xffff  , 0xffff  , 0xffff  },    {   Qt::Key_F8,     0xffff  , 0xffff  , 0xffff  },    {   Qt::Key_F9,     0xffff  , 0xffff  , 0xffff  },    {   Qt::Key_F10,        0xffff  , 0xffff  , 0xffff  },    {   Qt::Key_NumLock,    0xffff  , 0xffff  , 0xffff  },    {   Qt::Key_ScrollLock, 0xffff  , 0xffff  , 0xffff  },  // 70    {   Qt::Key_7,      '7'     , '7'     , 0xffff  },    {   Qt::Key_8,      '8'     , '8'     , 0xffff  },    {   Qt::Key_9,      '9'     , '9'     , 0xffff  },    {   Qt::Key_Minus,      '-'     , '-'     , 0xffff  },    {   Qt::Key_4,      '4'     , '4'     , 0xffff  },    {   Qt::Key_5,      '5'     , '5'     , 0xffff  },    {   Qt::Key_6,      '6'     , '6'     , 0xffff  },    {   Qt::Key_Plus,       '+'     , '+'     , 0xffff  },    {   Qt::Key_1,      '1'     , '1'     , 0xffff  },    {   Qt::Key_2,      '2'     , '2'     , 0xffff  },  // 80    {   Qt::Key_3,      '3'     , '3'     , 0xffff  },    {   Qt::Key_0,      '0'     , '0'     , 0xffff  },    {   Qt::Key_Period,     '.'     , '.'     , 0xffff  },    {   Qt::Key_unknown,    0xffff  , 0xffff  , 0xffff  },    {   Qt::Key_unknown,    0xffff  , 0xffff  , 0xffff  },    {   Qt::Key_unknown,    0xffff  , 0xffff  , 0xffff  },    {   Qt::Key_F11,        0xffff  , 0xffff  , 0xffff  },    {   Qt::Key_F12,        0xffff  , 0xffff  , 0xffff  },    {   Qt::Key_unknown,    0xffff  , 0xffff  , 0xffff  },    {   Qt::Key_unknown,    0xffff  , 0xffff  , 0xffff  },  // 90    {   0,          0xffff  , 0xffff  , 0xffff  }};#endifstatic const int keyMSize = sizeof(keyM)/sizeof(QWSServer::KeyMap)-1;static QIntDict<QWSServer::KeyMap> *overrideMap = 0;/*!  Changes the mapping of the keyboard; adding the scancode to Unicode  mappings from \a map. The server takes over ownership of \a map  and will delete it. Use QCollection::setAutoDelete() to control  whether the contents of \a map should be deleted.  Passing a null pointer for \a map will revert to the default keymap.*/void QWSServer::setOverrideKeys( QIntDict<QWSServer::KeyMap> *map ){    delete overrideMap;    overrideMap = map;}#if !defined(_OS_QNX6_)/*!  \class QWSKeyboardHandler qkeyboard_qws.h  \brief Keyboard driver/handler for Qt/Embedded  The keyboard driver/handler handles events from system devices and  generates key events.  A QWSKeyboardHandler will usually open some system device in its  constructor, create a QSocketNotifier on that opened device and when  it receives data, it will call processKeyEvent() to send the event  to Qt/Embedded for relaying to clients.*//*!  Subclasses call this to send a key event. The server may additionally  filter it before sending it on to applications.  <ul>  <li>\a unicode is the Unicode value for the key, or 0xffff if none is appropriate.  <li>\a keycode is the Qt keycode for the key (see Qt::Key).       for the list of codes).  <li>\a modifiers is the set of modifier keys (see Qt::Modifier).  <li>\a isPress says whether this is a press or a release.  <li>\a autoRepeat says whether this event was generated by an auto-repeat	    mechanism, or an actual key press.  </ul>*/void QWSKeyboardHandler::processKeyEvent(int unicode, int keycode, int modifiers,			bool isPress, bool autoRepeat){    qwsServer->processKeyEvent( unicode, keycode, modifiers, isPress, autoRepeat );}#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX)#define QT_QWS_AUTOREPEAT_MANUALLY#endifclass QWSPC101KeyboardHandler : public QWSKeyboardHandler{    Q_OBJECTpublic:    QWSPC101KeyboardHandler();    virtual ~QWSPC101KeyboardHandler();    void doKey(uchar scancode);    #ifdef QT_QWS_AUTOREPEAT_MANUALLY    void setAutoRepeat(int d, int p) { if ( d > 0 ) repeatdelay=d; 				       if ( p > 0 ) repeatperiod=p;}    void getAutoRepeat(int *d ,int *p ) { if (d) *d=repeatdelay;     					  if (p) *p=repeatperiod; }#endif    void restoreLeds();    private slots:    void autoRepeat();private:    bool shift;    bool alt;    bool ctrl;#if defined(QT_QWS_SL5XXX)    bool meta;    bool fn;    bool numLock;#endif    bool caps;#if defined(QT_QWS_IPAQ)    uint ipaq_return_pressed:1;#endif    int extended;    int modifiers;    int prevuni;    int prevkey;#ifdef QT_QWS_AUTOREPEAT_MANUALLY    // Could be used by other subclasses    QTimer* repeater;    int repeatdelay, repeatperiod;#endif};void QWSPC101KeyboardHandler::autoRepeat(){#ifdef QT_QWS_AUTOREPEAT_MANUALLY    processKeyEvent( prevuni, prevkey, modifiers, FALSE, TRUE );    processKeyEvent( prevuni, prevkey, modifiers, TRUE, TRUE );    repeater->start(repeatperiod);#endif}void QWSPC101KeyboardHandler::restoreLeds(){    char leds;    ioctl(0, KDGETLED, &leds);    leds = leds & ~LED_CAP;    if ( caps ) leds |= LED_CAP;    ioctl(0, KDSETLED, leds);}class QWSTtyKeyboardHandler : public QWSPC101KeyboardHandler{    Q_OBJECTpublic:    QWSTtyKeyboardHandler(const QString&);    virtual ~QWSTtyKeyboardHandler();private slots:    void readKeyboardData();private:    struct termios origTermData;};class QWSUsbKeyboardHandler : public QWSPC101KeyboardHandler{    Q_OBJECTpublic:    QWSUsbKeyboardHandler(const QString& device);    virtual ~QWSUsbKeyboardHandler();private slots:    void readKeyboardData();private:    int fd;};class QWSVr41xxButtonsHandler : public QWSKeyboardHandler{    Q_OBJECTpublic:    QWSVr41xxButtonsHandler();    virtual ~QWSVr41xxButtonsHandler();    bool isOpen() { return buttonFD > 0; }private slots:    void readKeyboardData();private:    QString terminalName;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -