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
事件以及TabletMove
、TabletEnterProximity
和TabletLeaveProximity
事件,返回值始终为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。
但是,在某些平台上,这是可配置的,因此上述相同的操作将产生负增量值(但具有相同的大小)。使用反转属性,滚轮事件接收者可以选择始终遵循滚轮的方向,而不受系统设置的影响,但仅适用于特定的窗口部件。