转载请注明出处:
http://www.cnblogs.com/baizx/

键盘设备在Qt中表现为QWSKeyboardHandler的一个实例,为了支持各种各样的键盘设备,Qt提供了QWSKeyboardHandler接口,各种键盘设备只需要在收到底层操作系统键盘设备的按键以后调用QWSKeyboardHandler的processKeyEvent函数即可将键盘信息传递到Qt系统中,然后由QWSServer分发给适当的客户端。QWSKeyboardHandler最重要的函数就是提供了processKeyEvent,方便其子类调用该函数将键码传递到Qt系统中。列出了Qt预置的所有的键盘驱动,详细信息可以参考Qt官方帮助文档。

图2- 6 QWSKeyboardHandler继承关系图

如果要实现自定义的键盘设备,那么可以通过继承QWSKeyBoardHandler来实现,主要工作分为两部分,一部分是设备初始化,另外一部分工作就是等待用户按键,并将信息传递到qt系统。

具体流程可以参照下图:

底层键盘设备已经由驱动负责了,这里只需打开设备,并监听设备描述符,将可读信号关联到自定义的slot上,当有按键数据可读取时直接进行读取。

notifier = new QSocketNotifier(kbdFD, QSocketNotifier::Read, this);

connect(notifier, SIGNAL(activated(int)),this,SLOT(readKeyboardData()));

另外一部分工作就是等待用户按键,并传递到qt系统内部。见下图

从底层键盘设备读取出来的数据格式可能各种各样,如果符合Linux标准输入输出接口,那么就不用做任何改动, 但是经常我们会有一些特殊的按键设置,必须进行一定的转换,这些工作就要在此步完成。然后由

void QWSServer::processKeyEvent ( int unicode, int keycode,  modifiers, bool isPress, bool autoRepeat )  [static]

这是一个静态函数,因此可以直接使用,这些参数中最重要的是keycode,要将自定义的按键值转换为Qt内部的键码,比如:Qt::Key_Delete等等,modifiers是用于组合按键,像ctrl,shift的处理。第一个参数unicode一般没用, 可以忽略。

Qt中键盘驱动是通过环境变量QWS_KEYBOARD来确定,如果没有则使用默认的,如果有则使用用户指定的,使用方法和Qt中的鼠标设备一样,可以参考

http://www.cnblogs.com/baizx/archive/2010/04/08/1707790.html

转载于:https://www.cnblogs.com/baizx/archive/2010/07/20/1781362.html

Qt/E中的键盘设备管理相关推荐

  1. 在Qt Designer中创建主Windows

    在Qt Designer中创建主Windows 在Qt Designer中创建主Windows 菜单Menus 创建菜单 创建菜单项 工具栏 创建和删除工具栏 添加和删​​除工具栏按钮 动作Actio ...

  2. ubuntu下qt模拟键盘按键按下_基于QT的跨平台虚拟键盘设计与实现

    摘  要: 针对QT在Windows.Linux.以及嵌入式Linux-arm等不同平台下没有开源.高效的虚拟键盘(包含中文输入法),以及QT版本升级造成代码不兼容等问题,设计并实现了一个跨平台的虚拟 ...

  3. QT 5.7虚拟键盘(支持中文输入)Windows+Ubuntu

    一 Windows下 Qt5.7.1安装虚拟键盘(支持中文输入) 1.环境: windows + qt5.7.1(qt-opensource-windows-x86-mingw530-5.7.1.ex ...

  4. qt套件中未设置qt版本, NO C++ compiler set in kit

    今天突然遇到 :qt套件中未设置qt版本,如图. 本人小白,错的地方还请大哥们指点,谢谢. 解决方法: 1.文件 --> 关闭项目; 删掉项目中的"项目名.pro.user" ...

  5. 【Qt OpenGL】Qt Creator中的3D绘图及动画教程

    Qt Creator中的3D绘图及动画教程(参照NeHe) 刚刚学习了Qt Creator,发现Qt提供了QtOpenGL模块,对OpenGL做了不错的封装,这使得我们可以很轻松地在Qt程序中使用Op ...

  6. QT解决方案中新建动态链接库工程,且继承于QObject,解决无法生成moc_XXX.cpp文件的问题,解决工程之间的引用问题

    QT解决方案中新建动态链接库工程,且继承于QObject,解决无法生成moc_XXX.cpp文件的问题,解决工程之间的引用问题 参考文章: (1)QT解决方案中新建动态链接库工程,且继承于QObjec ...

  7. Qt/PyQt中使用系统全局的快捷键

    Qt/PyQt中使用系统全局的快捷键 除了全局快捷键部分外,其他的都比较简单,都是我实现"onekeycodehighlighter"中碰到的一些小问题,这里顺面整理一下.事实上, ...

  8. QT发布中遇到的问题 - wufan的专栏 - 博客频道 - CSDN.NET

    QT发布中遇到的问题 - wufan的专栏 - 博客频道 - CSDN.NET QT发布中遇到的问题 分类: qt 2012-04-05 11:15 8人阅读 评论(0) 收藏 举报 最近开始研究qt ...

  9. qt如何用python结合_在Qt(C++)中与Python混合编程

    一.PythonQt库 在Qt(C++)中与Python混合编程,可以使用PythonQt库. 网站首页:http://pythonqt.sourceforge.net 下载页面:https://so ...

最新文章

  1. 【技巧——windows】直接登陆到桌面,免去输入密码
  2. python调用gitlab api自动合并分支_Python3 如何使用 GitLab API 进行批量的合并分支
  3. 国际化在zuul中实现
  4. [云炬创业基础笔记]第七章创业资源测试1
  5. 将二进制文件bold转化为文件file
  6. python基础代码大全-python零基础入门命令方式汇总大全,快速恶补你的Python基础...
  7. bzoj 1689: [Usaco2005 Open] Muddy roads 泥泞的路(模拟)
  8. MLP多层感知机原理简介+代码详解
  9. python中pandas库里的read_table和read_csv的区别
  10. qt将tablewidget导出为excel
  11. 新中大财务软件-A3中怎样更改IP地址
  12. 【VBA研究】用VBA创建数据透视表
  13. EasyNLP 发布融合语言学和事实知识的中文预训练模型 CKBERT
  14. BRD、MRD、PRD
  15. OGRE 火炬之光(torchlight) 骨骼动画
  16. markdown 摘记
  17. 傻瓜式ensp380启用NGFW USG6000v教程,并附web网管教程
  18. 图像特征提取与匹配方法总结
  19. 实战:JS批量打包下载图片--(zip压缩)
  20. CISAW信息安全保障人员-应急管理

热门文章

  1. php 变量输入,PHP-输入变量
  2. android 中edittext控件 输入错误后焦点不变_常用基本控件测试用例(二)
  3. 双精度数举例_Aladdin阿拉丁:一套土木工程结构无损检测领域先进的双极化天线阵雷达...
  4. 037_Dropdown下拉菜单
  5. 汽车线束测试软件,Aigtek线束测试仪,汽车线束测试_高精度自动测试_操作简单...
  6. redhat linux创建磁盘分区,redhat6.4 挂载硬盘,创建新分区,删除分区
  7. Android多媒体开发
  8. Android应用开发:动画和Fragment
  9. linux下创建proc文件系统,[转载]Linux下的proc文件系统(转载)
  10. 什么时候用到全排列_请问在排列组合中,在什么情况下要乘以全排列