我在AM3359上运行的是linux系统,然后做了一个3*3的矩阵键盘。
下面是测试函数:
#define NOKEY 0#define KEY_ENTER 28#define KEY_F1 59#define KEY_F2 60#define KEY_F3 61#define KEY_F4 62#define KEY_UP 103#define KEY_LEFT 105#define KEY_RIGHT 106#define KEY_DOWN 108#define KEY_MENU 139int main(){ int keys_fd; char ret[2]; struct input_event t; keys_fd = open("/dev/input/event0", O_RDONLY); if(keys_fd<=0) { printf("open /dev/event0 device error!\n"); return 0; } while(1) { if(read(keys_fd,&t,sizeof(t))==sizeof(t)) { if(t.type==EV_KEY) if(t.value==1||t.value==2) { // printf("%d \n", t.code); switch(t.code) { case KEY_F1: printf("KEY_F1 %s\n",(t.value)?"Pressed":"Released"); break; case KEY_F2: printf("KEY_F2 %s\n",(t.value)?"Pressed":"Released"); break; case KEY_F3: printf("KEY_F3 %s\n",(t.value)?"Pressed":"Released"); break; case KEY_F4: printf("KEY_F4 %s\n",(t.value)?"Pressed":"Released"); break; case KEY_ENTER: printf("KEY_ENTER %s\n",(t.value)?"Pressed":"Released"); break; case KEY_UP: printf("KEY_UP %s\n",(t.value)?"Pressed":"Released"); break; case KEY_LEFT: printf("KEY_LEFT %s\n",(t.value)?"Pressed":"Released"); break; case KEY_RIGHT: printf("KEY_RIGHT %s\n",(t.value)?"Pressed":"Released"); break; case KEY_DOWN: printf("KEY_DOWN %s\n",(t.value)?"Pressed":"Released"); break; case KEY_MENU: printf("KEY_MENU %s\n",(t.value)?"Pressed":"Released"); break; default: printf("KEY_11111111111111 %s\n",(t.value)?"Pressed":"Released"); break; } } } } close(keys_fd); return 0;}
测试之后没问题。按下和抬起都有响应。
然后我用QT,我的QT版本是4.8.1
设置QT的环境变量:export QWS_KEYBOARD="tty:/dev/input/event0"
QT中运行的代码如下:
void MainWindow::keyPressEvent(QKeyEvent *k)
{
int keyvalue = 0;
keyvalue = k->key();
switch(keyvalue)
{
case Qt::Key_F1:
qDebug()<<"Key_F1 = "<<keyvalue;
break;
default:
qDebug()<<"Kvalue = "<<keyvalue;
break;
}
}
然后我运行QT程序,按下F1
打印如下:
Kvalue = 16777216Kvalue = 45Kvalue = 16777216Key_F1 = 0x1000030
Key_F1 = 16777264Kvalue = 16777216Kvalue = 16777216Kvalue = 45Kvalue = 16777216Kvalue = 16777249Kvalue = 16777219Kvalue = 16777216Kvalue = 16777288Kvalue = 16777216Kvalue = 92Kvalue = 16777329Kvalue = 16777219
怎么会有这么多的打印值,default:貌似运行了很多次啊,求大神。
Jian Zhou:
你之前验证成功的QT是哪个版本的?是在TI参考板上验证的吗?
jack king1:
回复 Jian Zhou:
哦用的QT版本是4.8.1,自己移植上去的,板子是自己做的
kooking:
回复 jack king1:
QKeyEvent 最终会调用内核里面的驱动,可能会和自定义的键盘发生冲突,所以可以修改内核驱动,或者直接把测试程序放到QT程序里面也行