【发布时间】:2017-07-12 23:20:39
【问题描述】:
当我拖动自定义小部件时,我希望鼠标“卡”在 QScrollArea 内。我将 QScrollArea 设为了一个名为 MyScrollArea 的子类,因此我可以重新实现事件 mouseMoveEvent。这是MyScrollArea 子类:
myscrollarea.h
#ifndef MYSCROLLAREA_H
#define MYSCROLLAREA_H
#include <QScrollArea>
#include <QDebug>
#include <QtGui>
class MyScrollArea : public QScrollArea
{
Q_OBJECT
public:
explicit MyScrollArea(QWidget *parent = 0);
signals:
void changeLabel(QString);
public slots:
protected:
void leaveEvent(QEvent *event);
void mouseMoveEvent(QMouseEvent *event);
private:
int mouseX, mouseY;
};
#endif // MYSCROLLAREA_H
myscrollarea.cpp
#include "myscrollarea.h"
MyScrollArea::MyScrollArea(QWidget *parent)
: QScrollArea(parent)
{
this->setMouseTracking(true);
mouseX = 0;
mouseY = 0;
}
void MyScrollArea::leaveEvent(QEvent *event)
{
qDebug() << "LEFT!";
}
void MyScrollArea::mouseMoveEvent(QMouseEvent *event)
{
mouseX = event->x();
mouseY = event->y();
event->accept();
emit changeLabel(QString::number(mouseX) + ", " + QString::number(mouseY));
}
即使鼠标跟踪设置为 true,我也只能在按住按钮时获得 mouseMoveEvent。
我的问题是:
- 如何让
mouseMoveEvent在所有动作中触发? - 当他拖动我创建的自定义小部件时,如何将光标设置到最后一个位置(“QScrollArea”内)?
【问题讨论】:
-
你有没有尝试实现mousePressEvent和mouseReleaseEvent?
-
并非如此。但是当我“抓取”自定义小部件(拖动它)以不允许小部件移动到 QScrollArea 之外时,我需要光标的位置。如何使用 mousePress 和 mouseRelease 做到这一点?当我单击任意位置时,鼠标按下不会激活吗?
-
尝试使用 eventFilter
-
这将解决我的第二个问题。但我真的很想知道为什么“mouseMoveEvent”没有触发。我会尝试使用事件过滤器
-
您正在寻找鼠标跟踪:您必须启用它。
标签: c++ qt restrictions