首页| 论坛| 消息

标题:QT自定义串口键盘,如何实现键盘按键映射
作者:liu_yan725
日期:2010-12-14 18:58
内容:

求助:

2410开发板的串口连接一个触摸按键,通过串口接收键值,创建一个线程接收串口键盘数值,现在可以从正常接收,使用如下代码实现键值映射
QWSServer *server;
server->processKeyEvent ( 0xffff, Qt::Key_F1, 0, true, false);
编译可以通过,但是按下F1按键没有反映?
原按键使用“/dev/tty0
QWS_KEYBOARD=TTY:/dev/tty0
可以正常使用原键盘按键


#1 [liu_yan725 12-14 19:14]
自己顶一下
#2 [liu_yan725 12-14 19:54]
在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
#3 [liu_yan725 12-15 13:34]
还是自己顶一下吧!问题任然没有解决!期待中.......
#4 [liu_yan725 12-16 20:29]
问题解决:
我开了一个线程监视串口,使用
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

第一次发帖,虽然没人捧场,那就自己捧场吧!

回复 发表
主题 版块