1、鼠标事件
鼠标事件包括鼠标的移动,鼠标键按下、松开、单击、双击和滚轮事件等。
在实际使用中,只需重定义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
{
//滚轮往后滚动
}
}
2、键盘事件
键盘事件的获取是通过重定义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定义了一系列修饰键,如下所示:
3、事件过滤
Qt的事件模型中提供的事件过滤功能使得一个QObject对象可以监视另一个QObject对象中的事件,通过在一个QObject对象中安装事件过滤器,可以在事件到达该对象前捕获事件,从而起到监视该对象事件的作用。
步骤:
1、为对象安装事件过滤器
label1->installEventFilter(this);
label2->installEventFilter(this);
label3->installEventFilter(this);
QObject的remoeEventFilter()函数可以解除以安装的事件过滤器。
2、重写QObject的事件监视函数
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)
{
}
}
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓