Qt - 鼠标事件

欢迎转载,请注明出处:https://blog.csdn.net/qq_39453936?spm=1010.2135.3001.5343
原文链接: https://blog.csdn.net/qq_39453936/article/details/120784898


QMouseEvent的详细描述

  • 在小部件内按下或释放鼠标按钮或移动鼠标光标时,会发生鼠标事件。
  • 只有在按下鼠标按钮时才会发生鼠标移动事件,除非使用QWidget::setMouseTracking()启用了鼠标跟踪。
  • 当在小部件内按下鼠标按钮时,Qt自动抓取鼠标;小部件将继续接收鼠标事件,直到释放最后一个鼠标按钮。
    注意:Qt中的QMouseEvent一般只涉及鼠标左键或右键的单击、释放等操作,而对鼠标滚轮的响应则通过QWheeEvent来处理。
  • 鼠标事件包含一个特殊的接受标志flag,指示接收者是否需要该事件。如果小部件未处理鼠标事件,则应调用ignore()。鼠标事件沿父窗口小部件链向上传播,直到窗口小部件使用accept()接受鼠标事件,或者事件筛选器使用鼠标事件。
    注意:如果将鼠标事件传播到为其设置了Qt::WA_NoMousePropagation的小部件,则该鼠标事件将不会进一步传播到父小部件链的上游。
  • 通过调用从QInputEvent继承的modifiers()函数,可以找到键盘键值的状态。
  • 函数pos()、x()和y()给出光标相对于接收鼠标事件的小部件的位置。如果由于鼠标事件而移动小部件,请使用globalPos()返回的全局位置来避免抖动。
  • QWidget::setEnabled()函数可用于启用或禁用小部件的鼠标和键盘事件。
  • 需要对鼠标事件进行处理时,通常要重新实现以下几个鼠标事件处理函数:
    QWidget::mousePressEvent()
    QWidget::mouseReleaseEvent()
    QWidget::mouseDoubleClickEvent()
    QWidget::mouseMoveEvent()
    

QMouseEvent 相关使用

QMouseEvent::QMouseEvent(QEvent::Type type, const QPointF &localPos, const QPointF &windowPos, const QPointF &screenPos, Qt::MouseButton button, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Qt::MouseEventSource source)

构造鼠标事件对象。

类型参数必须是QEvent::MouseButtonPress、QEvent::MouseButtonRelease、QEvent::MouseButtonDblClick或QEvent::MouseMove。

localPos、windowPos和screenPos点分别指定鼠标光标相对于接收小部件或项目、窗口和屏幕的位置。

导致事件的按钮作为Qt::MouseButton枚举中的值提供。如果事件类型为MouseMove,则此事件的相应按钮为Qt::NoButton。按钮是事件发生时所有按钮的状态,修饰符是所有键盘修饰符的状态。

事件的源由源指定。

  • Qt::MouseButton QMouseEvent::button() const
    返回导致事件的按钮。
    请注意,对于鼠标移动事件,返回的值始终为Qt::NoButton。

  • Qt::MouseButtons QMouseEvent::buttons() const
    返回生成事件时的按钮状态。按钮状态是使用OR运算符的Qt::LeftButton、Qt::RightButton、Qt::MidButton的组合。对于鼠标移动事件,这是所有按下的按钮。对于鼠标按下和双击事件,这包括导致事件的按钮。对于鼠标释放事件,这不包括导致事件的按钮。

鼠标按下事件mousePressEvent

[virtual protected] void QWidget::mousePressEvent(QMouseEvent *event)

可以在子类中重新实现该事件处理程序,以接收小部件的鼠标按下事件。示例:

void Widget::mousePressEvent(QMouseEvent *event)
{
	//如果鼠标左键按下
    if (event->button() == Qt::LeftButton) {
    	//获取鼠标在事件接收者中的位置pos
        lastPoint = event->pos();
    }
	// 如果是鼠标右键按下
	else if(event->button() == Qt::RightButton)
	{
	   //···
	}  
}

鼠标移动事件mouseMoveEvent

[virtual protected] void QWidget::mouseMoveEvent(QMouseEvent *event)

可以在子类中重新实现这个事件处理程序,以接收小部件的鼠标移动事件。如果关闭鼠标跟踪,则只有在移动鼠标时按下鼠标按钮,才会发生鼠标移动事件。如果打开鼠标跟踪setMouseTracking(true); ,即使未按下鼠标按钮,也会发生鼠标移动事件。
每当您移动小部件以响应鼠标事件时,globalPos()可能与当前指针位置QCursor::pos()和QWidget::mapToGlobal(pos())有很大不同。
示例:

void ScribbleArea::mouseMoveEvent(QMouseEvent *event)
{
	// 这里必须使用buttons()
    if ((event->buttons() & Qt::LeftButton) && scribbling)
    {
    	//···
    }
}

鼠标释放事件mouseReleaseEvent

[virtual protected] void QWidget::mouseReleaseEvent(QMouseEvent *event)

可以在子类中重新实现这个事件处理程序,以接收小部件的鼠标释放事件。
示例:

void Widget::mouseReleaseEvent(QMouseEvent *event)
{
   if (event->button() == Qt::LeftButton) {
          lastPoint = event->pos();
      }
}

QWheelEvent

鼠标滚轮事件

void Widget::wheelEvent(QWheelEvent *event)
{  
    if(event->delta() > 0)// 当滚轮远离使用者时
    {
        ···
    }
    else//当滚轮向使用者方向旋转时
    {
        ···
    }
}

鼠标移入移出事件

  • [virtual protected] void QWidget::enterEvent(QEvent *event)

  • [virtual protected] void QWidget::leaveEvent(QEvent *event)

此事件处理程序可以在子类中重新实现,以接收在事件参数中传递的小部件进入或离开事件。示例:

void Widget::enterEvent(QEvent *)
{
    qDebug()<<"鼠标移入";
}
void Widget::leaveEvent(QEvent *)
{
   qDebug()<<"鼠标移出";
}

参考文章:https://blog.csdn.net/liyuanbhu/article/details/53710249
小白发文,欢迎指正

  • 11
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt QChart是Qt提供的用于图表绘制的模块之一,通过QChart可以方便地创建各种类型的图表。在QChart中,可以通过处理鼠标事件来实现与用户的交互。 QChart中的鼠标事件主要包括三种:鼠标按下、鼠标移动和鼠标释放。可以通过在QChartView的事件过滤器中重写这些事件的处理函数来实现对鼠标事件的响应。 首先,需要在QChartView对象上启用鼠标追踪功能,这样在鼠标移动事件发生时才能捕捉到鼠标的当前位置。可以通过调用setMouseTracking(true)函数来实现。 在鼠标按下事件中,可以获取鼠标的当前位置,然后通过调用chart()->mapToValue()函数将屏幕坐标映射为图表坐标,从而确定鼠标点击的位置。接着,可以根据此位置进行相应的处理,例如高亮显示特定数据点或弹出数据提示框等。 在鼠标移动事件中,同样可以通过chart()->mapToValue()函数获取鼠标当前位置对应的图表坐标,然后可以根据当前位置的变化来动态更新图表中的一些元素,比如显示当前坐标的数值等。 在鼠标释放事件中,可以进行一些清理工作,例如恢复图表的初始状态,取消数据点的高亮显示等。 总的来说,通过处理QChartView中的鼠标事件,可以实现对QChart图表的交互操作,为用户提供更加丰富的数据展示和操作方式。 ### 回答2: Qt QChart是Qt框架中的一个图表库,用于绘制各种类型的图表。在QChart中,可以通过鼠标事件来与图表进行交互和操作。 首先,在QChart中,可以通过重写QWidget的鼠标事件相关的函数来处理鼠标事件。常用的鼠标事件函数有鼠标按下事件(mousePressEvent)、鼠标移动事件(mouseMoveEvent)、鼠标释放事件(mouseReleaseEvent)等。 鼠标按下事件(mousePressEvent)在用户按下鼠标按钮时触发,并通过获取鼠标坐标等信息来响应用户的操作。在QChart中,可以通过获取鼠标坐标,并利用坐标信息实现一些与鼠标操作相关的功能,例如在图表上显示数据点的数值。 鼠标移动事件(mouseMoveEvent)在用户移动鼠标时触发,可以通过获取鼠标坐标等信息进行一些动态效果的实现。例如,在移动鼠标时,在图表上显示鼠标所在位置的数据点信息。 鼠标释放事件(mouseReleaseEvent)在用户释放鼠标按钮时触发,可以用于完成一些鼠标操作的结束动作。例如,绘制一个矩形框选取图表上的一部分数据点。 通过使用这些鼠标事件函数,可以实现一些与用户交互和操作相关的功能。例如,通过判断鼠标的点击位置,在图表上绘制一个十字线,用于显示当前鼠标所在位置的数据点;或者通过鼠标拖拽某个数据点,实现数据的动态更新和交互。 总之,Qt QChart提供了丰富的鼠标事件函数,可以通过重写这些函数来响应用户的鼠标操作,实现与图表相关的交互和操作功能。 ### 回答3: Qt QChart提供了一些鼠标事件来处理用户与图表的交互。以下是一些常见的鼠标事件及其作用: 1. 鼠标进入事件(QEvent::Enter):当鼠标进入图表区域时触发,可以用于显示鼠标所在位置的数值或增加交互效果。 2. 鼠标移动事件(QEvent::MouseMove):当鼠标在图表区域内移动时触发,可以使用cursor().pos()函数获取当前鼠标的位置,以便在相应的坐标轴上显示数值或进行其他操作。 3. 鼠标滚轮事件(QEvent::Wheel):当鼠标滚轮在图表区域内滚动时触发,可以使用event->delta()函数获取滚轮的滚动方向和滚动距离,再根据需要进行图表的缩放或滚动。 4. 鼠标按下事件(QEvent::MouseButtonPress):当鼠标按下时触发,可以使用event->button()函数获取按下的鼠标按钮的类型(左键、右键、中键等),再根据需要进行相应的操作,比如拖拽图表。 5. 鼠标释放事件(QEvent::MouseButtonRelease):当鼠标释放时触发,一般与鼠标按下事件结合使用,用于完成一些与鼠标操作相关的任务。 通过对这些鼠标事件的处理,可以实现一些高级的交互功能,如放大缩小、平移、数据查询等,从而提升用户体验和操作的灵活性。因此,在使用Qt QChart绘制图表时,合理处理这些鼠标事件是非常重要的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值