Qt 处理鼠标和键盘交互

Qt 键盘和鼠标交互

一、回调函数

1.键盘回调

void keyPressEvent(QKeyEvent *event) override; //键盘按下回调
void keyReleaseEvent(QKeyEvent *event) override; //键盘松开回调

1.1.QKeyEvent
1.1.1public functions

int count() const

返回与此事件相关的键的数量。如果text()不为空,则这仅仅是字符串的长度。

bool isAutoRepeat() const

如果此事件来自自动重复按键,则返回true;如果来自初始按键,则返回false。
请注意,如果事件是由于自动重复的部分多键压缩事件,此函数可能会无法确定地返回true或false。

int key() const

返回被按下或释放的按键编码,编码详见Qt::Key。
请注意,此函数不区分大写和小写字母,要实现这个区分,使用text()函数(返回按键生成的Unicode文本)。
值为0或Qt::Key_unknown表示该事件不是由已知按键触发的;例如,它可能是由于组合序列、键盘宏或按键事件压缩引起的。

QKeyCombination keyCombination() const

返回一个包含此事件所携带的key()和modifiers()的QKeyCombination对象。
此函数在Qt 6.0中引入。

bool matches(QKeySequence::StandardKey key) const

如果按键事件与给定的标准按键匹配,则返回true;否则返回false。

Qt::KeyboardModifiers modifiers() const

返回事件发生后立即存在的键盘修饰符标志。

警告:此函数不能始终信任。例如,用户可以同时按下两个Shift键并释放其中一个,从而混淆它。

quint32 nativeModifiers() const

返回事件发生后立即存在的键盘修饰符标志。

警告:此函数不能始终信任。例如,用户可以同时按下两个Shift键并释放其中一个,从而混淆它。

quint32 nativeScanCode() const

返回键盘事件的本机修饰符。如果键盘事件不包含此数据,则返回0。

注意:即使键盘事件包含扩展信息,本机修饰符可能为0。

quint32 nativeVirtualKey() const

返回键盘事件的本机虚拟键或键符号。如果键盘事件不包含此数据,则返回0。

注意:即使键盘事件包含扩展信息,本机虚拟键可能为0。

QString text() const

返回由此按键生成的Unicode文本。
在按下修饰键(如Shift、Control、Alt和Meta)时,不同平台返回的值可能不同,可能为空字符串。

2.鼠标回调函数

void mousePressEvent(QMouseEvent* event) override; //鼠标按下回调
void mouseReleaseEvent(QMouseEvent* event) override;

void mouseMoveEvent(QMouseEvent* event) override;

2.1.QMouseEvent
2.1.1.public functions

Qt::MouseButton QSinglePointEvent::button() const

返回引发事件的按钮。

对于mouseMoveEvent事件以及TabletMoveTabletEnterProximityTabletLeaveProximity事件,返回值始终为Qt::NoButton

Qt::MouseButtons QSinglePointEvent::buttons() const

返回所有正在被按下的MouseButton的与运算的结果,一般在mouseMoveEvent中使用,用于判断某个按键是否正在被按下。

QPointF QSinglePointEvent::position() const

返回基于Widget坐标系的鼠标坐标。

QPointF QSinglePointEvent::globalPosition() const

获取鼠标的位置,是基于电脑屏幕的坐标系。

3.滚轮回调函数

void wheelEvent(QWheelEvent *event) override; // 滚轮事件

3.1.QWheelEvent
3.1.1.Describe

滚轮事件首先发送给鼠标光标下的窗口部件,但如果该窗口部件不处理该事件,事件将被发送给焦点窗口部件。滚轮事件既可以由鼠标滚轮生成,也可以由触控板滚动手势生成。有两种方式可以读取滚轮事件的增量:angleDelta() 返回滚轮度数的增量,这些值始终可用。pixelDelta() 返回屏幕像素中的增量,仅在具有高分辨率触控板的平台(例如macOS)上可用。如果是这种情况,device()->type() 将返回QInputDevice::DeviceType::Touchpad。

3.1.2.public functions

QPoint QWheelEvent::angleDelta() const

返回一个Qpoint,x()是水平滚动角度(一般鼠标不支持,为0),y()是垂直滚动(数值=鼠标滚动的角度*8);
大多数鼠标类型以15度为步进,因此增量值是120的倍数;因为,120单位 * 1/8 = 15度。

QPoint QWheelEvent::pixelDelta() const

返回在屏幕上以像素为单位的滚动距离。此值在支持高分辨率像素增量值的平台上提供,例如macOS。该值应用于控制在屏幕上滚动内容

Qt::ScrollPhase QWheelEvent::phase() const

返回此滚轮事件的滚动阶段。

bool QWheelEvent::inverted() const

返回事件传递的增量值是否被反转。

通常,如果滚轮的顶部远离操作它的手,垂直滚轮将产生具有正增量值的QWheelEvent。类似地,如果将滚轮的顶部向左移动,水平滚轮运动将产生具有正增量值的QWheelEvent。
但是,在某些平台上,这是可配置的,因此上述相同的操作将产生负增量值(但具有相同的大小)。使用反转属性,滚轮事件接收者可以选择始终遵循滚轮的方向,而不受系统设置的影响,但仅适用于特定的窗口部件。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值