QT自定义键盘问题,我在qkeyboard_qws.cpp里继承了QWSKeyboardHandler,实现自己定义的键盘,当按键的时候没有进入readKeyboardData()这个函数,是不是驱动方面还有问题?谢谢啦!
QWSEbookButtonsHandler::QWSEbookButtonsHandler() : QWSKeyboardHandler()
{
terminalName = "/dev/buttons";
buttonFD = -1;
notifier = 0;
if ((buttonFD = ::open(terminalName, O_RDWR | O_NDELAY, 0)) < 0)
{
qWarning("Cannot open %s\n", terminalName.latin1());
return;
}
printf("open buttons dev ok\n");
notifier = new QSocketNotifier( buttonFD, QSocketNotifier::Read, this );
connect( notifier, SIGNAL(activated(int)),this,SLOT(readKeyboardData()));
}
QWSEbookButtonsHandler::~QWSEbookButtonsHandler()
{
if ( buttonFD > 0 ) {
::close( buttonFD );
buttonFD = -1;
}
delete notifier;
notifier = 0;
delete [] kbdBuffer;
}
void QWSEbookButtonsHandler::readKeyboardData()
{
int n=0 ;
int key_value;
int buf[81];
n = ::read(buttonFD, &key_value, sizeof key_value);
if (n != sizeof key_value) return;
printf("key value is %d by xingfeng\n",key_value);
doKey(key_value);
}
void QWSEbookButtonsHandler::doKey(int key)
{
int k=(-1);
switch(key){
case 1:
k=Qt::Key_W;
break;
case 2:
k=Qt::Key_S;
break;
case 3:
k=Qt::Key_A;
break;
case 4:
k=Qt::Key_D;
break;
case 5:
k=Qt::Key_L;
break;
case 6:
k=Qt::Key_Escape;
break;
default: k=(-1);
break;
}
if( k >= 0 )
{
qwsServer->processKeyEvent( 0, k, 0, 1, false );
}
}
newKeyboardHandler里有生成自定义的对象了
else if( type == "/dev/buttons")
{
handler = new QWSEbookButtonsHandler();
printf("use sanxo keypad \n");
}
启动qt程序也有打印
open buttons dev ok
use sanxo keypad
notifier = new QSocketNotifier( buttonFD, QSocketNotifier::Read, this );
connect( notifier, SIGNAL(activated(int)),this,SLOT(readKeyboardData()));
也就是说这里没有触发信号