TI中文支持网
TI专业的中文技术问题搜集分享网站

matrix_keypad.c矩阵键盘和QT映射的问题,求各路大神援助

我在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程序里面也行

赞(0)
未经允许不得转载:TI中文支持网 » matrix_keypad.c矩阵键盘和QT映射的问题,求各路大神援助
分享到: 更多 (0)