关于QT下的触摸屏.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
关于QT下的触摸屏

qwsmouse_qws.cpp在linuette/host/qt/embedded/qt2.3.1/src/kernel目录下面Qt的鼠标和触摸屏驱动?Qt的鼠标和触摸屏驱动主要集中在qwsmouse_qws.cpp当中.在qt中,触摸屏作为一种特别的鼠标,具有和鼠标同等的处理方法.在qt初始化的时候,会输入一些环境变量,包括QWS_KEYBORAD:设定键盘的类型QWS_MOUSE_PROT设定鼠标的类型和设备.格式是::protocol包括以下的几种:MouseMan,IntelliMouse,Microsoft等,device就是鼠标(或者触摸屏)的设备文件,一般是/dev/mouse,还可能是/dev/ps2(ps类型的鼠标),ttyS*(串口鼠标),而对于触摸屏,则会是/dev/Tpanel(在2.4.*的qte版本中).因为鼠标的驱动是qt的server的功能,而server关于鼠标的代码就集中在qwsmouse_qws.cpp中.由于qtembedded是由c++语言写成,所以鼠标的驱动,实际上就是一些不同的鼠标类的实现,他们的基类就是QMouseHandle或者QAutoMouseHandle.整个的流程是这样的:根据环境变量QWS_MOUSE_PROTO的定义,选择一个特定的鼠标驱动程序来完成鼠标的驱动(选择一个特定的鼠标类来完成).在特定的鼠标驱动程序中,首先打开设备文件,如果设备文件为空,就打开默认的设备文件,相应的默认设备文件在代码中都有详细的介绍.然后通过读取设备文件的数据,分析得到的数据,变换成相应的鼠标消息,通过SendMouseEvent的方式,将其发送到应用程序.触摸屏的不同之处在于,它需要进行调整.因为从设备得到的数据是物理屏的数据,比如s3c2410的触摸屏的ad转换是10位精度,也就是说物理数据从0~1023,在实际的情况中一般是100~1000之间的数据,而我们的液晶屏是640*480(或者是其他的,这和触摸屏的数据没有任何的关系),所以必须将物理数据转换为屏幕上点的数据.他们之间的转换公式,就必须通过定标的方式来确定.所谓的定标,就是在屏幕上依次出现topleft,bottomleft,bottomright,topright和center一共5个点,用户必须依次在这5个点上点击(在触摸屏上点击,触摸屏就放在液晶屏的上方),这样我们得到了物理的点,也得到了对应的实际的点,因此就可以计算出相应的参数,计算公式是:s=116;a=s*(screen_tl.x()-screen_br.x())/(dev_tl.x()-dev_br.x());b=0;c=s*screen_tl.x()-a*dev_tl.x();d=0;e=s*(screen_tl.y()-screen_br.y())/(dev_tl.y()-dev_br.y());f=s*screen_tl.y()-e*dev_tl.y();假设p是物理的数据,那么转换到屏幕上点的公式就是:x=(a*p.x()+b*p.y()+c)/s);y=(d*p.x()+e*p.y()+f)/s);需要注意的是:如果物理的点特别的不合常理,比如左边和右边的y的差值相差太大,说明屏的线性度太差,不会通过测试.S3c2410的触摸屏驱动是iPAQ兼容的驱动,编译的时候需要定义2个宏:QWS_MOUSE_IPAQ,QWS_MOUSE_IPAQ_RAW.同时设定的是QWS_MOUSE_PROTO=Tpanel:/dev/h3600_tsraw上面列举的参数,会首先从文件/etc/pointercal中读取,这个文件格式就是:abcdefs如果屏的质量稳定,我们可以将测得的数据放在这个文件当中,并取消掉定标的过程,这样就可以每次使用默认的设置,而不需要重新计算了.贴个源码,大家参考一下,在qwsmouse_qws.cpp中添加:typedef struct{/* liftup: 0 / touchdown: 0x7f */short pressure;short xpos;short ypos;short timestamp;} ts_sample; //检索触笔状态?typedef struct{int xscale;int xtrans;int yscale;int ytrans;int reverse;} ts_cal_values; //触笔坐标校正?class QWSXscaleMouseHandlerPrivate : public QWSMouseHandler?{Q_OBJECTpublic:QWSXscaleMouseHandlerPrivate(MouseProtocol protocol, QString mouseDev);~QWS

文档评论(0)

baoyue + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档