Qt 鼠标事件 与 键盘事件 | 您所在的位置:网站首页 › qt获取键盘 › Qt 鼠标事件 与 键盘事件 |
鼠标事件
鼠标常用的事件可以说有一下几种:鼠标按下、鼠标移动、鼠标移动、鼠标双击和鼠标滚轮事件。 当你想使用他们,需要包含头文件:#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帮助文档! 顾名思义,鼠标在窗体上移动时促发。但是,为了节省耗能,需要鼠标按下后才会促发此函数。 如果我们有需求,不需要按下鼠标键就可以促发鼠标移动事件,我看网上说:在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()返回修饰键。 键盘按下松开后便会触发此函数。 键盘按下事件有的功能,键盘释放事件都有! 几个键盘事件常用函数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 实验室设备网 版权所有 |