(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)
谢谢