完成了俄罗斯方块,其中最为困难的是如何重映射自定义键盘,需要修改的是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/i 2c -keypad", O_NDELAY);
if (kbdFD>=0){
iMX1_notifier= new QSocketNotifier( kbdFD, QSocketNotifier::Read, this );
}
else{
qWarning("Cannot open /dev/i 2c -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();实例化自定义的键盘类。