#include #include #include #include #include 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; } } };