Я хочу, чтобы мышь «застряла» внутри 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));
}
Даже если отслеживание мыши установлен так, я только успел получить mouseMoveEvent
когда кнопка Ручной.
Мой вопрос:
- Как сделать
mouseMoveEvent
курок во всех движениях? - Как установить курсор на последнюю позицию (внутри «QScrollArea»), когда он перетаскивает пользовательский виджет, который я создал?
Вы пытались реализовать mousePressEvent и mouseReleaseEvent? – eyllanesc
Не совсем. Но мне нужно положение курсора, когда я «захвачу» пользовательский виджет (перетащить его), чтобы не позволить виджету перемещаться за пределами QScrollArea. как я могу это сделать, используя mousePress и mouseRelease? Не будет ли нажата кнопка мыши, когда я просто щелкнув в любом месте? – andseg
попробуйте с eventFilter – eyllanesc