9.3 鼠标事件
好文章,来自【福优学苑@音视频+流媒体】
9.3 鼠标事件
QMouseEvent的详细描述
首先请注意,Qt中的QMouseEvent一般只涉及鼠标左键或右键的单击、释放等操作,而对鼠标滚轮的响应则通过QWheeEvent来处理。
QMouseEvent类包含了用于描述鼠标事件的参数。好文章,来自【福优学苑@音视频+流媒体】
当在一个窗口里按住鼠标按键、或移动、或释放就会产生鼠标事件QMouseEvent。
鼠标移动事件只会在按下鼠标按键的情况下才会发生,除非通过显式调用QWidget::setMouseTracking()函数来开启鼠标轨迹,这种情况下只要鼠标指针在移动,就会产生一系列的QT鼠标事件;好文章,来自【福优学苑@音视频+流媒体】
在一个窗口中,当鼠标按键被按下时,QT会自动捕捉鼠标轨迹,鼠标指针所在的父窗口会继续接受鼠标事件,直到最后一个鼠标按键被释放。
QMouseEvent的传递
一个鼠标事件包含一些指定的接受标志flag用于指出该事件是否会被接收和处理 ,如果鼠标指针所在的父窗口不接收该事件则可以调用函数ignore()予以忽略;
多个重叠的窗口在实现里好比一个递归的倒立树,鼠标事件会沿着鼠标指针所在的父窗口的链表向上传递,直到某个窗口调用accept()函数进行事件处理,否则该事件将被过滤销毁掉;好文章,来自【福优学苑@音视频+流媒体】
鼠标事件处理函数
需要对鼠标事件进行处理时,通常要重新实现以下几个鼠标事件处理函数:
QWidget::mousePressEvent()
QWidget::mouseReleaseEvent()
QWidget::mouseDoubleClickEvent()
QWidget::mouseMoveEvent()
鼠标事件代码
鼠标事件使用的时候,加头文件好文章,来自【福优学苑@音视频+流媒体】
#include <QMouseEvent>
1.鼠标按下事件
复制代码
void Widget::mousePressEvent(QMouseEvent *event)
{
// 如果是鼠标左键按下
if(event->button() == Qt::LeftButton)
{
···好文章,来自【福优学苑@音视频+流媒体】
}
// 如果是鼠标右键按下
else if(event->button() == Qt::RightButton)
{
···
}
}
复制代码
2.鼠标移动事件
默认情况下,触发事件需要点击一下,才能触发。
可设置为自动触发:setMouseTracking(true);
复制代码
void Widget::mouseMoveEvent(QMouseEvent *event)
{
// 这里必须使用buttons()
if(event->buttons() & Qt::LeftButton) //进行的按位与
{
}
}
3.鼠标释放事件
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
···
}
4.鼠标双击事件
void Widget::mouseDoubleClickEvent(QMouseEvent *event)
{
// 如果是鼠标左键按下
if(event->button() == Qt::LeftButton){
}
}
5.滚轮事件
void Widget::wheelEvent(QWheelEvent *event)
{
if(event->delta() > 0)// 当滚轮远离使用者时
{
}
else//当滚轮向使用者方向旋转时
{
···
}
}
好文章,来自【福优学苑@音视频+流媒体】
***【在线视频教程】***