qt linux窗口大小变化后刷新鼠标事件

qt linux窗口大小变化后刷新鼠标事件,第1张

鼠标事件使用的时候,需要加头文件。

鼠标移动事件默认情况下,触发事件需要点击一下,才能触发。可设置为自动触发。一个鼠标事件包含一些指定的接受标志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()


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8012391.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-12
下一篇2023-04-12

发表评论

登录后才能评论

评论列表(0条)

    保存