重映射自定义键盘

来源:互联网 发布:skidmore college知乎 编辑:程序博客网 时间:2024/04/27 23:13

完成了俄罗斯方块,其中最为困难的是如何重映射自定义键盘,需要修改的是qt-2.3.7/src/kernel/qkeyboard_qws.cpp,在这里添加自定义键盘;参考代码如下

class QWSiMX1KeyboardHandler : public QWSKeyboardHandler

{

       Q_OBJECT

public:

       QWSiMX1KeyboardHandler();

       virtual ~QWSiMX1KeyboardHandler();

 

private slots:

       void readKeyboardData();

 

private:

       unsigned char iMX1_keyVal;

       QSocketNotifier *iMX1_notifier;

      

};

 

QWSiMX1KeyboardHandler::QWSiMX1KeyboardHandler()

       : QWSKeyboardHandler()

{

       iMX1_notifier= 0;

       kbdFD=open("/dev/i2c-keypad", O_NDELAY);

       if (kbdFD>=0){

              iMX1_notifier= new QSocketNotifier( kbdFD, QSocketNotifier::Read, this );   

       }

       else{

              qWarning("Cannot open /dev/i2c-keypad");

       }

 

       connect( iMX1_notifier, SIGNAL(activated(int)),this,

               SLOT(readKeyboardData()) );

 

       iMX1_keyVal= 0;

}

 

QWSiMX1KeyboardHandler::~QWSiMX1KeyboardHandler()

{

       if (kbdFD>=0){

              ::close(kbdFD);

              kbdFD=-1;

              delete iMX1_notifier;

              iMX1_notifier=0;

       }

}

 

void QWSiMX1KeyboardHandler::readKeyboardData()

{

       int keyCode= Qt::Key_unknown;

      

       read(kbdFD, &iMX1_keyVal, 1);

 

       //qDebug("iMX1_keyVal=%d", int(iMX1_keyVal));

      

       switch (iMX1_keyVal)

       {

              case 251: keyCode= Qt::Key_Up;     break;

              case 191: keyCode= Qt::Key_Down;     break;

              case 127: keyCode= Qt::Key_Left;     break;

              case 223: keyCode= Qt::Key_Right;     break;

              case 247: keyCode= Qt::Key_F1;     break;

              case 253: keyCode= Qt::Key_F2;     break;

              case 255: break;

              default: qWarning("unrecognised iMX1_keyVal %d", int(iMX1_keyVal));

       }

       processKeyEvent( 0, keyCode, 0, true, false );

}

包括,对自定义键盘类的申明,构造函数,析构函数和readKeyboardData()函数。

还需要在QWSKeyboardHandler *QWSServer::newKeyboardHandler( const QString &spec )函数中添加:handler= new QWSiMX1KeyboardHandler();实例化自定义的键盘类。

 
原创粉丝点击