我想在拖動自定義小部件時將鼠標「卡」在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