QT6 源,六章,事件系统(7):QHoverEvent 鼠标悬停事件,

(1)QHoverEvent 鼠标悬停事件

本类的继承关系如下

在这里插入图片描述

++类的继承图里数据成员的定义情况,这涉及到类的成员函数的使用与类的功能

在这里插入图片描述

(2)本类的定义

/*
The QHoverEvent class contains parameters that describe a mouse event.

Detailed Description :
当鼠标光标进入、离开或在小部件内移动时,如果小部件具有Qt::WA_Hover属性,则会发生鼠标事件。
pos()函数提供当前光标位置,而oldPos()函数提供旧鼠标位置。
事件 QEvent:HoverEnter和 QEvent:HoverLeave 与事件 QEvent::nter和 QEvent:Leave 有一些相似之处,
但它们在处理上略有不同,因为我们在 HoverEnter和 HoverLeave 的事件处理函数中执行了 update ()方法。

    void QWidget::  setAttribute(Qt::WidgetAttribute attribute, bool on = true);
    bool QWidget:: testAttribute(Qt::WidgetAttribute) const 用这俩函数设置属性

QEvent::HoverMove`也与`QEvent:.MouseMove`稍有不同。让我们考虑一个顶层窗口A,
它包含一个子窗(所有这些窗口都启用了鼠标跟踪)口B,而B又包含一个子窗口C:

现在,如果你将光标从A的顶部移动到底部,在中间位置,你会得到以下QEvent:MouseMove事件:
1. A::MouseMove
2.B::鼠标移动事件
3.C::MouseMove

你将获得与 QEvent::HoverMove 相同的事件,但无论事件是否被接受,该事件始终会传播到顶层。
只有通过设置 Qt::WA_NoMousePropagation 属性,才能阻止其传播。
在这种情况下,事件将以以下方式发生
1.A::鼠标悬停移动
2.A::悬停移动,B::悬停移动
3.A::悬停移动,B::悬停移动,C::悬停移动

*/
class Q_GUI_EXPORT QHoverEvent : public QSinglePointEvent
{
    Q_EVENT_DISABLE_COPY(QHoverEvent);

protected:
    QPointF m_oldPos; // TODO remove?

public:
    //构建一个源自设备的悬停事件对象。
    //类型参数必须是QEvent::HoverEnter、QEvent::HoverLeave或QEvent::HoverMove。
    //pos是指当前鼠标光标相对于接收小部件的位置,而 oldPos 则是其先前的此类位置。
    //modifiers 包含事件发生时所有键盘修饰符的状态。
    QHoverEvent(Type type, const QPointF & pos, const QPointF & oldPos,
                Qt::KeyboardModifiers modifiers = Qt::NoModifier,
                const QPointingDevice * device = QPointingDevice::primaryPointingDevice());

    ~QHoverEvent();

    QHoverEvent * clone() const override { return new QHoverEvent(*this); }


    bool isUpdateEvent() const override  { return true; }

    // TODO deprecate when we figure out an actual replacement (point history?)
    inline QPoint  oldPos () const { return m_oldPos.toPoint(); }
    inline QPointF oldPosF() const { return m_oldPos; }

}; //完结 class QHoverEvent : public QSinglePointEvent

(3)

谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangzhangkeji

谢谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值