qtopia2之mouse事件

      触摸笔的底层可以采用tslib。

     在qte中,对tslib对应的device (/dev/ts)设一个QSocketNotifier, 监视tslib事件。当有触摸笔按下时,产生signal, 读取mousedata, 获得press值、坐标、时刻。press非0表示按住, 为0表示release。通过时刻可以判断是否双击。

     这里需要注意的问题之一是触摸笔的精度问题。  长按触摸笔或者划线条的时候,读取的坐标值有可能漂移。需要做个误差处理。

      此外,不同的应用场合,需要处理不同的mouse事件。 比如editor可能需要长按后,模拟右键,弹出复制粘贴菜单, 有的应用希望长按的时候按 repeat 来处理。

      记住,有的设备是不可能产生long press或者repeat press事件的。比如手机上的roller。所以有些功能,不要设计成只依赖long press/repeat press, 这样将导致这些功能不可通用。

       qtopia2本身没有实现 long press 产生右键、复制粘贴等功能。可以进行修改获得:

      qwsmouse_qws.cpp文件中, readMouseData 函数中, 增加 发现 long press后,产生一个右键的处理。

      QWSServer将mouse event放到event队列中。

       根据对应的QWidget,调用其translateMouseEvent 方法。在translateMouseEvent函数中,会对mouse events进行压缩处理。 比如触摸笔划动,本来会产生 press, press,press.... realease, 会被压缩成press ,   mouse move, release 三个event来处理。

       此外每第一次press event,实际上是按 move event + press event来处理的。也就是press event的新老坐标都是相同的。在右键和左键两个事件中,qt会自动插入一次release事件。详细见dispatchMouseEvent函数。

       editor 对右键的复制粘贴功能,可以修改QLineEdit和 QMultiLineEdit两个类实现。如果你正确理解了上面mouse event的转换,修改应该不难。     

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值