我想在拖动自定义小部件时将鼠标“卡”在QScrollArea内部。我使QScrollArea成为一个名为MyScrollArea
的子类,因此我可以重新实现事件mouseMoveEvent
。这是MyScrollArea
子类:Qt 5.7如何限制小部件内部的鼠标移动
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? – eyllanesc
不是。但是当我“抓住”自定义小部件(拖动它)以不允许部件移出QScrollArea时,我需要光标的位置。我如何使用mousePress和mouseRelease来做到这一点?当我点击任何地方时,鼠标按下是否也会激活? – andseg
尝试eventFilter – eyllanesc