Qt 鼠标事件 与 键盘事件 您所在的位置:网站首页 qt获取键盘 Qt 鼠标事件 与 键盘事件

Qt 鼠标事件 与 键盘事件

2023-08-12 11:20| 来源: 网络整理| 查看: 265

鼠标事件

鼠标常用的事件可以说有一下几种:鼠标按下、鼠标移动、鼠标移动、鼠标双击和鼠标滚轮事件。

当你想使用他们,需要包含头文件:#include

并重写一下方法:

protected: void mousePressEvent(QMouseEvent *event) override; // 鼠标按下事件 void mouseMoveEvent(QMouseEvent *event) override; // 鼠标移动事件 void mouseReleaseEvent(QMouseEvent *event) override; // 鼠标释放事件 void mouseDoubleClickEvent(QMouseEvent *event) override; // 鼠标双击事件 void wheelEvent(QWheelEvent *event) override; // 鼠标滚轮事件

下面将一一分解。

鼠标按下事件 void mousePressEvent(QMouseEvent *event) override; void MouseEvent::mousePressEvent(QMouseEvent *event) { // 鼠标左键按下 if (event->button() == Qt::LeftButton) { // 鼠标中键按下 } else if (event->button() == Qt::MidButton) { // 鼠标右键按下 } else if (event->button() == Qt::RightButton) { } }

当系统监测到有鼠标按下时,便会促发该函数。 当然,可以使用参数event进行判断到底是那个鼠标键按下!

鼠标左键:Qt::LeftButton 鼠标中键:Qt::MidButton 鼠标右键:Qt::RightButton

更多可以参考qt帮助文档! 在这里插入图片描述

鼠标移动事件 void mouseMoveEvent(QMouseEvent *event) override; void MouseEvent::mouseMoveEvent(QMouseEvent *event) { }

顾名思义,鼠标在窗体上移动时促发。但是,为了节省耗能,需要鼠标按下后才会促发此函数。 如果我们有需求,不需要按下鼠标键就可以促发鼠标移动事件,我看网上说:在Widget中可以在构造函数中加上这句:this->setMouseTracking(true); 这样就可以完美解决这样的问题,具体是不是这样,我没有亲自去尝试!

当然此种方式在MainWindow中就不管用了,网上说:要先把QMainWindow的CentrolWidget使用setMouseTracking(true)开启移动监视。然后在把QMainWindow的setMouseTracking(true)开启监视。

ui.centralWidget->setMouseTracking(true); this->setMouseTracking(true);

不过,我试过了,在我这里不管用,不知道是怎么回事(继承父类MainWindow)。也查过了许多博客,介绍都是说添加上面那两行代码即可解决。所以很无奈,如果哪位朋友知道怎么解决的请评论区告诉我,谢谢!!!

当然也是可以通过参数event判断是哪个鼠标按键按下。

鼠标释放事件 void mouseReleaseEvent(QMouseEvent *event) override; void MouseEvent::mousePressEvent(QMouseEvent *event) { }

当鼠标按下松开时,便会触发此函数。 左键松开、右键松开、中间松开都会触发。

当然也是可以通过参数event判断是哪个鼠标按键按下。

鼠标双击事件 void mouseDoubleClickEvent(QMouseEvent *event) override; void MouseEvent::mouseDoubleClickEvent(QMouseEvent *event) { }

当鼠标双击时,便会触发此函数。 左键双击、右键双击、中间双击都会触发。

当然也是可以通过参数event判断是哪个鼠标按键按下。

鼠标滚轮事件 void wheelEvent(QWheelEvent *event) override; void MouseEvent::wheelEvent(QWheelEvent *event) { } 几个鼠标事件常用函数

Qt::MouseButton button() const event->button() :返回引起事件的按钮

QPoint QMouseEvent::globalPos() const event->globalPos() :返回鼠标光标在事件发生时的全局位置。 注意:他的(0, 0)坐标是电脑窗体的左上角,获取的坐标是基于整个电脑窗体的。

QPoint pos() const event->pos() :返回鼠标光标相对于接收事件的小部件的位置。 也即是说,他的(0, 0)坐标是运行窗体的左上角,获取的坐标是窗体中的坐标。

键盘事件

键盘事件有两个,键盘按下事件与键盘释放事件。

当你想使用他们,需要包含头文件:#include

并重写一下方法:

protected: void keyPressEvent(QKeyEvent *event) override; // 键盘按下事件 void keyReleaseEvent(QKeyEvent *event) override; // 键盘释放事件

需要注意的是:

回车键是Qt::Key_Return如需按下修饰键,需要使用modifiers()方法进行返回按下的修饰键。 alt键:Qt::AltModifier ctrl键:Qt::ControlModifier shift键:Qt::ShiftModifier 还有许许多多的修饰键与按键,可参考qt帮助文档。

下面将一一分解。

键盘按下事件 void keyPressEvent(QKeyEvent *event) override; void KeyEvent::keyPressEvent(QKeyEvent *event) { // 按下修饰键,且按下的键时ctlr if (event->modifiers() == Qt::ControlModifier) { if (event->key() == Qt::Key_Left) { // 左键按下 } else if (event->key() == Qt::Key_Right) { // 右键按下 } else if (event->key() == Qt::Key_Up) { // 上键按下 } else if (event->key() == Qt::Key_Down) { // 下键按下 } } }

监听键盘事件,当有键盘键按下时便会触发。 使用key()函数返回当前按下的键,进行判断具体按下了键盘哪个键。 modifiers()返回修饰键。 在这里插入图片描述

键盘释放事件 void keyReleaseEvent(QKeyEvent *event) override; void KeyEvent::keyReleaseEvent(QKeyEvent *event) { }

键盘按下松开后便会触发此函数。 键盘按下事件有的功能,键盘释放事件都有!

几个键盘事件常用函数

int QKeyEvent::key() const event->key() :返回被按下或释放的键的代码。 也就是说,按下哪个键,就返回哪个键。

Qt::KeyboardModifiers QKeyEvent::modifiers() const event->modifiers() :返回事件发生后立即存在的键盘修饰符标志。 例如alt键,ctrl键,shift键。

QString QKeyEvent::text() const event->text() :返回此键生成的Unicode文本。 也就是说返回键盘按下的文本。

总结: 鼠标事件与键盘事件都有着丰富的枚举来支持着,他们符合一定的条件便会触发。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有