사용자 정의 위젯을 드래그하는 동안 마우스를 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을 구현하는 시도 해 봤나 :
가 eventFilter 기능을 다시 구현? – eyllanesc
아닙니다. 그러나 위젯이 QScrollArea 외부로 이동하지 못하도록 사용자 정의 위젯을 "잡아"드래그 할 때 커서 위치가 필요합니다. mousePress 및 mouseRelease를 사용하면 어떻게 할 수 있습니까? 아무 곳이나 클릭하면 마우스 누르기도 활성화되지 않습니까? – andseg
try with eventFilter – eyllanesc