文章目录
- 一、鼠标事件
- 二、键盘事件
- 三、事件过滤
一、鼠标事件
鼠标事件包括鼠标的移动,鼠标键按下、松开、单击、双击和滚轮事件等。
在实际使用中,只需重定义QWidget的三个鼠标事件方法,即
mouseMoveEvent
、
mousePressEvent
、
mouseReleaseEvent
、
mouseDoubleClickEvent
和
wheelEvent(QWheelEvent *event)
void MouseEvent::mousePressEvent(QMouseEvent *e)
{
if(e->button() == Qt::LeftButton)
{
//按下了鼠标左键
}
else if(e->button() == Qt::RightButton)
{
//按下了鼠标右键
}
else if(e->button() == Qt::MidButton)
{
//按下了鼠标中键
}
}
void MouseEvent::mouseMoveEvent(QMouseEvent *e)
{
}
void MouseEvent::mouseReleaseEvent(QMouseEvent *e)
{
}
void MouseEvent::mouseDoubleClickEvent(QMouseEvent *e)
{
}
void MouseEvent::wheelEvent(QWheelEvent *event)
{
if(event->dalta() > 0)
{
//滚轮往前滚动
}
else
{
//滚轮往后滚动
}
}
二、键盘事件
键盘事件的获取是通过重定义QWidget类的
keyPressEvent()
和
keyReleaseEvent()
来实现的。
void KeyEvent::keyPressEvent(QKeyEvent *event)
{
//对Ctrl键按下的处理
if(event->modifiers()==Qt::ControlModifier) //a
{
if(event->key()==Qt::Key_Left)
{
}
if(event->key()==Qt::Key_Right)
{
}
if(event->key()==Qt::Key_Up)
{
}
if(event->key()==Qt::Key_Down)
{
}
}
else //对Ctrl键没有按下的处理
{
}
}
(a) if(event->modifiers()==Qt::ControlModifier):判断修饰键Ctrl是否按下。Qt::KeyboardModifier定义了一系列修饰键,如下所示:
修饰键 | 说明 |
Qt::NoModifier | 没有修饰键按下 |
Qt::ShiftModifier | Shift键按下 |
Qt::ControlModifier | Ctrl键按下 |
Qt::AltModifier | Alt键按下 |
Qt::MetaModifier | Meta键按下 |
Qt::KeypadModifier | 小键盘按键按下 |
Qt::GroupSwitchModifier | Mode switch键按下 |
三、事件过滤
Qt的事件模型中提供的事件过滤功能使得一个QObject对象可以监视另一个QObject对象中的事件,通过在一个QObject对象中安装事件过滤器,可以在事件到达该对象前捕获事件,从而起到监视该对象事件的作用。
步骤:
1、为对象安装事件过滤器
label1->installEventFilter(this);
label2->installEventFilter(this);
label3->installEventFilter(this);
bool eventFilter(QObject *watched,QEvent *event)
{
if(watched==label1)
{
if(event->type()==QEvent::MouseButtonPress)
{
//将事件event转化为鼠标事件
QMouseEvent *mouseEvent=(QMouseEvent *)event;
}
if(mouseEvent->buttons() & Qt::LeftButton) //鼠标点击事件
{
}
else if(mouseEvent->buttons() & Qt::RightButton)
{
}
else if(mouseEvent->buttons() & Qt::MidButton)
{
}
if(mouseEvent->type()==QEvent::MouseButtonRelease) //鼠标释放事件
{
}
}
else if(watched==label2)
{
}
else if(watched==label3)
{
}
}