logplus/logPlus/DraggablePixmap.h
2025-10-29 17:23:30 +08:00

46 lines
1.6 KiB
C++

#include <QCustomPlot.h>
#include <QMouseEvent>
#include <QPointF>
#include <cmath>
#include <QDebug>
class DraggablePixmap : public QCPItemPixmap {
Q_OBJECT
public:
DraggablePixmap(QCustomPlot *parentPlot) : QCPItemPixmap(parentPlot) {
setSelectable(true); // 确保项是可选的,这对于接收鼠标事件很重要
}
protected:
bool mDragging = false;
QPointF mDragStart; // 拖拽开始时的位置
void mousePressEvent(QMouseEvent *event, const QPointF &pos) {
QCPItemPixmap::mousePressEvent(event, pos); // 调用基类的处理函数
if (event->button() == Qt::LeftButton) { // 仅当左键被按下时开始拖拽
mDragging = true;
mDragStart = pos; // 记录当前位置作为起始点
}
}
void mouseMoveEvent(QMouseEvent *event, const QPointF &pos) override {
QCPItemPixmap::mouseMoveEvent(event, pos); // 调用基类的处理函数
if (mDragging) {
// 计算新的位置并更新项的位置
double dx = pos.x() - mDragStart.x();
double dy = pos.y() - mDragStart.y();
qDebug() << "QCPItemPixmap mouseMoveEvent:" << QString::number(dx) << ":" << QString::number(dy);
//this->setPos(/*position().x() + */dx, /*position().y() +*/ dy); // 更新项的位置
}
}
void mouseReleaseEvent(QMouseEvent *event, const QPointF &pos) override {
QCPItemPixmap::mouseReleaseEvent(event, pos); // 调用基类的处理函数
if (event->button() == Qt::LeftButton) { // 仅当左键被释放时停止拖拽
mDragging = false;
}
}
};