
鼠标移动事件默认情况下,触发事件需要点击一下,才能触发。可设置为自动触发。一个鼠标事件包含一些指定的接受标志flag用于指出该事件是否会被接收和处理,如果鼠标指针所在的父窗口不接收该事件则可以调用函数ignore()予以忽略。
Qt是一个跨平台的C++图形用户界面库,由挪威TrollTech公司出品,包括Qt、基于FrameBuffer的QtopiaCore、快速开发工具QtDesigner和国际化工具QtLinguist等部分。Qt支持所有的UNIX系统,当然也包括Linux系统,还支持WinNT/Win2k、Windows95/98平台。
一、linux input 子系统中,每个输入设备可以建立一个devices,如插入USB mouse的时候会建立,在系统、dev/input目录下就会生成一个对应的device,如:/dev/input/event0,可以通过读取device获取输入设备的信息 具体可以访问http://blog.sina.com.cn/s/blog_602f87700101dno6.html
0.1:关键结构体input_event信息:
struct input_event {
struct timeval time
__u16 type
__u16 code
__s32 value
}
type: 设备类型。可以设置为:
sdk封装的解决思路;
type:EV_REL鼠标设备 0x02
code : rel_x 0x00 表示x轴方向 rel_y 0x01 表示y轴方向 (一次鼠标移动会产生两个input event事件)
value: EV_REL type下有正负表示方向
介绍键盘的code
Type为EV_KEY时,value: 0表示按键抬起。1表示按键按下。(4表示持续按下等?)。
问题:因为会出现一次鼠标移动就有两个事件产生,所以就要判断这一时刻到底是哪个事件
方法:
鼠标事件:
上1
下0
左2
右3
键盘事件:
上103
下108
左105
右106
停28
蓝牙键盘
1:2
2:3
3:4
4:5
5:6
w:17
a:30
s:31
d:32
linux下好办,所有的设备都当作文件处理了,在『/dev/input』目录下找到鼠标对应设备文件读出来即可。鼠标设备文件是『/dev/input/mice』,读3个字节,三个字节的值分别是『Button类型』,『X的相对位移』,『Y的相对位移』。取Button的低3位(Button &0x07)。 0x01 ->LeftButtonDown, 0x02 ->RightButtonDown.
import struct
mou = open( "/dev/input/mice", "rb" )
def m_event():
m = mou.read(3)
b = ord( m[0] )
bl = b &0x1
bm = ( b &0x4 ) >0
br = ( b &0x2 ) >0
x,y = struct.unpack( "bb", m[1:] )
print "Left:%d, Middle: %d, Right: %d, x: %d, y: %d\n" % (bl,bm,br, x, y)
while( 1 ):
m_event()
mou.close()
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)