目录
一、概念
事件是应用程序内部或者外部产生的事情或者动作的统称。在Qt中使用一个对象来表示一个事件。所有的Qt事件均继承于抽象类QEvent。事件是由系统或者Qt平台本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一-个相应的事件。-些事件 是在用户操作时发出,如键盘事件、鼠标事件等,另一些事件则是由系统本身自动发出,如定时器事件。
常见的事件有:QMouseEvent,QKeyEvent,QTimerEvent,QDropEvent,QInputEvent,QPaintEvent
常见的事件描述有
事件名称 | 描述 |
---|---|
鼠标事件 | 鼠标左键,鼠标右键,鼠标滚轮,鼠标移动,鼠标按下和松开 |
键盘事件 | 按键类型,按键按下,按键松开 |
定时器事件 | 定时时间到达 |
进入离开事件 | 鼠标的进入和离开 |
滚轮事件 | 鼠标滚轮滚动 |
绘屏事件 | 重绘屏幕 |
显示隐藏事件 | 窗口的显示和隐藏 |
移动事件 | 窗口位置的变化 |
窗口事件 | 是否为当前窗口 |
大小改变事件 | 窗口大小改变 |
焦点事件 | 键盘焦点移动 |
拖拽事件 | 用鼠标进行拖拽 |
二、事件处理
事件处理一般常用的方法为:重写相关的Event函数。
在Qt中,几乎所有的Event函数都是虚函数,所以可以重新实现。
如:在实现鼠标的进入和离开事件时,直接重新实现enterEvent()和leaveEvent()即可。enterEvent() 和leaveEvent() 函数原型如
实例
重写enterEvent和leaveEvent
创建一个QWidget文件,自己实现一个Label类,继承QLabel,重写其中的entetEvent和leaveEvent方法
重写两个接口,在进入和Label的时候只是进行打印提示
在ui文件中拖入一个Label
鼠标右击这个Label,点击提升为,输入对应的类名,点击添加,点击提升
此时我们可以看到,这是的Label就是我们自己实现的对QLabel继承的类
实现效果
三、鼠标事件
1.鼠标点击事件
重写虚函数 mousePressEvent
void Label::mousePressEvent(QMouseEvent *event)
{
if(event->button()==Qt::LeftButton)
{
qDebug()<<"鼠标左键按下";
}else if(event->button()==Qt::RightButton)
{
qDebug()<<"鼠标右键按下";
}else if(event->button()==Qt::MidButton)
{
qDebug()<<"鼠标中键按下";
}
}
2.鼠标释放事件
重写虚函数mouseReleaseEvent
void Label::mouseReleaseEvent(QMouseEvent *event)
{
if(event->button()==Qt::LeftButton)
{
qDebug()<<"鼠标左键松开";
}else if(event->button()==Qt::RightButton)
{
qDebug()<<"鼠标右键松开";
}else if(event->button()==Qt::MidButton)
{
qDebug()<<"鼠标中键松开";
}
}
1和2实现效果
3.鼠标移动事件
鼠标移动事件是通过虚函数: mouseMoveEvent() 来实现的。同时为了实时捕获鼠标位置信息,需要通过函数setMouseTracking()来追踪鼠标的位置
#include "widget.h"
#include "ui_widget.h"
#include<QDebug>
#include<QMouseEvent>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//设置鼠标跟踪
setMouseTracking(true);
}
void Widget::mouseMoveEvent(QMouseEvent *event)
{
qDebug()<<"["<<event->x()<<","<<event->y()<<"]";
}
Widget::~Widget()
{
delete ui;
}
四、按键事件
实现单按键事件,重载虚函数 KeyPressEvent
组合键触发事件
Qt::KeyboardModifier中定义了在处理键盘事件时对应的修改键。在Qt中,键盘事件可以与修改键一起使用,以实现一些复杂的交互操作。KeyboardModifier 中修改键的具体描述如下: