qte运行为什么会出现segmentation fault?
昨天在我的板子上接盘接口总算移植的差不多了,可是运行的时候出现segmentation fault这样的错误
按键键值都对上了,可是按键还没有反映,具体操作如下:
export QTDIR=/OPT/QT
export QTEDIR=$QTDIR
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./amr -qws
键盘可以正常启动,但按下第一个按键之后就会出现segmentation fault的错误提示如下:
Creating mouse: Auto
call openKeyboard!
keyboards
no define QT_NO_STRINGLIST!
create keyboard drive
drive is usb
fd is 11 //在这里按下按键就出现下面的提示
n is 10
event.dummy1 is 1fb7
event.dummy2 is 7d8c0
event.type is 1
event.code is 45
event.value is 1
key_numlock is 4133
Segmentation fault
[root@hengda bin]#
怀疑是代码的问题,现在我把qkbdusb_qws.cpp我修改过的代码贴出来,请各位帮忙看一下,谢谢:
struct Myinputevent {
unsigned int dummy1;
unsigned int dummy2;
unsigned short type;
unsigned short code;
unsigned int value;
};
void QWSUsbKbPrivate::readKeyboardData()
{
Myinputevent event;
int n = read(fd, &event, sizeof(Myinputevent) );
qDebug("n is %x",n);
if ( n != 16 )
return;
qDebug("event.dummy1 is %x",event.dummy1);
qDebug("event.dummy2 is %x",event.dummy2);
qDebug("event.type is %x",event.type);
qDebug("event.code is %x",event.code);
qDebug("event.value is %x",event.value);
int key=event.code;
int keycode=Qt::Key_unknown;
switch(key & 0x00ff){
case 0x60:
keycode=Qt::Key_Enter;
qDebug("key_enter is %d",keycode);
break;
case 0x45:
keycode=Qt::Key_NumLock;
qDebug("key_numlock is %d",keycode);
break;
case 0x37:
keycode=Qt::Key_Down;
qDebug("key_down is %d",keycode);
break;
case 0x4e:
keycode=Qt::Key_Plus;
qDebug("key_plus is %d",keycode);
break;
case 0x4a:
keycode=Qt::Key_Tab;
qDebug("key_tab is %d",keycode);
break;
case 0x53:
keycode=Qt::Key_Period;
qDebug("key_period is %d",keycode);
break;
case 0x62:
keycode=Qt::Key_Up;
qDebug("key_up is %d",keycode);
break;
case 0x52:
keycode=Qt::Key_0;
qDebug("key_0 is %d",keycode);
break;
case 0x4f:
keycode=Qt::Key_1;
qDebug("key_1 is %d",keycode);
break;
case 0x50:
keycode=Qt::Key_2;
qDebug("key_2 is %d",keycode);
break;
case 0x51:
keycode=Qt::Key_3;
qDebug("key_3 is %d",keycode);
break;
case 0x4b:
keycode=Qt::Key_4;
qDebug("key_4 is %d",keycode);
break;
case 0x4c:
keycode=Qt::Key_5;
qDebug("key_5 is %d",keycode);
break;
case 0x4d:
keycode=Qt::Key_6;
qDebug("key_6 is %d",keycode);
break;
case 0x47:
keycode=Qt::Key_7;
qDebug("key_7 is %d",keycode);
break;
case 0x48:
keycode=Qt::Key_8;
qDebug("key_8 is %d",keycode);
break;
case 0x49:
keycode=Qt::Key_9;
qDebug("key_9 is %d",keycode);
break;
default:
keycode=key;
qDebug("key is %d",keycode);
break;
}
handler->processKeyEvent( 0, keycode, 0, true, false );
}
执行之后各值如下:
[root@hengda bin]# ls
amr
[root@hengda bin]# ./amr -qws
Creating mouse: Auto
call openKeyboard!
keyboards
no define QT_NO_STRINGLIST!
create keyboard drive
drive is usb
fd is 11 //在这里按下按键就出现下面的提示
n is 10
event.dummy1 is 1fb7
event.dummy2 is 7d8c0
event.type is 1
event.code is 45
event.value is 1
key_numlock is 4133
Segmentation fault
[root@hengda bin]#
我有点不太明白,按键值是怎么读到event里面去的,
其中event.dummy1 is 1fb7
event.dummy2 is 7d8c0
event.type is 1
event.code is 45
event.value is 1
这个结构体里面的event.code是键值,那么其他结构变量各代表什么意思呢?
请那位大哥帮忙看一下是不是有问题?