私はカスタムウィジェットをドラッグしているうちに、マウスをQScrollAreaの中に「止め」たいと思っています。私はMyScrollArea
というサブクラスをQScrollAreaにしましたので、イベント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
try with eventFilter – eyllanesc