• 7289阅读
  • 4回复

QT自定义串口键盘,如何实现键盘按键映射 [复制链接]

上一主题 下一主题
离线liu_yan725
 
只看楼主 倒序阅读 楼主  发表于: 2010-12-14
求助


2410开发板的串口连接一个触摸按键,通过串口接收键值,创建一个线程接收串口键盘数值,现在可以从正常接收,使用如下代码实现键值映射
QWSServer *server;
server->processKeyEvent ( 0xffff, Qt::Key_F1, 0, true, false);

编译可以通过,但是按下F1按键没有反映?

原按键使用“/dev/tty0
QWS_KEYBOARD=TTY:/dev/tty0
可以正常使用原键盘按键
离线liu_yan725
只看该作者 1楼 发表于: 2010-12-14
自己顶一下
离线liu_yan725
只看该作者 2楼 发表于: 2010-12-14
在server->processKeyEvent ( 0xffff, Qt::Key_F1, 0, true, false);这个函数后面添加了一个打错语句:
perror("Error:::");

终端反复打印出
Error:::: Interrupted system call
Error:::: Interrupted system call
Error:::: Interrupted system call
Error:::: Interrupted system call
Error:::: Interrupted system call
离线liu_yan725
只看该作者 3楼 发表于: 2010-12-15
还是自己顶一下吧!问题任然没有解决!期待中.......
离线liu_yan725
只看该作者 4楼 发表于: 2010-12-16
问题解决:

我开了一个线程监视串口,使用
QSocketNotifier *notifier;
notifier = QSocketNotifier ( int socket, Type type, QObject * parent = 0, const char * name = 0 );
上一行代码可以用一下实现(继承的类要为QObject)
notifier = QSocketNotifier ( fd, QSocketNotifier::Read, this );
fd-------打开串口的文件描述符
Type type-------QSocketNotifier::Read

connect(fd, signal(activated()), this, solt(readKeyboardData()) );
当串口有数据过来的时候,slot响应,readKeyboardData()函数要自己重新写为读打开的串口;

然后就是将读来的数据与标准键值做个映射了

processKeyEvent(unicode, keycode, modifiers, false, false);
unicode可以忽视,我定为0;
keycode为QT标准键值(例如:QT::Key_F1)
modifiers定义为0(可以根据需求)
第四个参数bool,如果为keyPressEvent则为true;keyReleaseEvent则为false
最后一个我用的是false


第一次发帖,虽然没人捧场,那就自己捧场吧!
快速回复
限100 字节
 
上一个 下一个