不按住鼠标按钮不接收 mouseMoveEvent
Not receiving mouseMoveEvent without holding mouse button
我正在尝试实现悬停功能,当我将鼠标悬停在项目的特定区域时,我会重新绘制项目。
class TestItem : public QQuickItem
{
Q_OBJECT
public:
explicit TestItem(QQuickItem *parent = nullptr) : QQuickItem(parent)
{
setAcceptHoverEvents(true);
setAcceptedMouseButtons(Qt::AllButtons);
}
protected:
// QQuickItem interface
void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE
{
qDebug() << "mouseMoveEvent()" << event->buttons() << event->x() << event->y();
}
void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE
{
qDebug() << "mousePressEvent()" << event->buttons() << event->x() << event->y();
}
void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE
{
qDebug() << "mouseReleaseEvent()" << event->buttons() << event->x() << event->y();
}
};
但是,使用这个 class 当我将光标移到我的项目上时,我没有在终端上收到任何 "mouseMoveEvent()" 输出。它只在按住任何鼠标按钮时有效。
如何在不强制用户按住任何鼠标按钮的情况下实现这一点?
我自己可以解决,问题是我在监听错误的事件。正确的事件应该是 hoverMoveEvent()
.
使用以下 class,我得到了正确的输出:
class TestItem : public QQuickItem
{
Q_OBJECT
public:
explicit TestItem(QQuickItem *parent = nullptr) : QQuickItem(parent)
{
setAcceptHoverEvents(true);
}
protected:
// QQuickItem interface
void hoverEnterEvent(QHoverEvent *event) Q_DECL_OVERRIDE
{
qDebug() << "hoverEnterEvent()" << event->posF();
}
void hoverMoveEvent(QHoverEvent *event) Q_DECL_OVERRIDE
{
qDebug() << "hoverMoveEvent()" << event->posF();
}
void hoverLeaveEvent(QHoverEvent *event) Q_DECL_OVERRIDE
{
qDebug() << "hoverLeaveEvent()" << event->posF();
}
};
我正在尝试实现悬停功能,当我将鼠标悬停在项目的特定区域时,我会重新绘制项目。
class TestItem : public QQuickItem
{
Q_OBJECT
public:
explicit TestItem(QQuickItem *parent = nullptr) : QQuickItem(parent)
{
setAcceptHoverEvents(true);
setAcceptedMouseButtons(Qt::AllButtons);
}
protected:
// QQuickItem interface
void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE
{
qDebug() << "mouseMoveEvent()" << event->buttons() << event->x() << event->y();
}
void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE
{
qDebug() << "mousePressEvent()" << event->buttons() << event->x() << event->y();
}
void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE
{
qDebug() << "mouseReleaseEvent()" << event->buttons() << event->x() << event->y();
}
};
但是,使用这个 class 当我将光标移到我的项目上时,我没有在终端上收到任何 "mouseMoveEvent()" 输出。它只在按住任何鼠标按钮时有效。
如何在不强制用户按住任何鼠标按钮的情况下实现这一点?
我自己可以解决,问题是我在监听错误的事件。正确的事件应该是 hoverMoveEvent()
.
使用以下 class,我得到了正确的输出:
class TestItem : public QQuickItem
{
Q_OBJECT
public:
explicit TestItem(QQuickItem *parent = nullptr) : QQuickItem(parent)
{
setAcceptHoverEvents(true);
}
protected:
// QQuickItem interface
void hoverEnterEvent(QHoverEvent *event) Q_DECL_OVERRIDE
{
qDebug() << "hoverEnterEvent()" << event->posF();
}
void hoverMoveEvent(QHoverEvent *event) Q_DECL_OVERRIDE
{
qDebug() << "hoverMoveEvent()" << event->posF();
}
void hoverLeaveEvent(QHoverEvent *event) Q_DECL_OVERRIDE
{
qDebug() << "hoverLeaveEvent()" << event->posF();
}
};