QT QChartView拖拽曲线功能【简易版】

因为我的主窗口是继承QMainWindow,所以没法再继承QChatView了

所以需要我们重写自己的QChartView

太懒了,这边简写一下主要代码吧:

MyChartView.h里面

class MyChartView : public QChartView

{

public:

.....

protected:

  virtual void mousePressEvent(QMouseEvent *event) override;

  virtual void mouseMoveEvent(QMouseEvent *event) override;

  virtual void mouseReleaseEvent(QMouseEvent *event) override;

private:

   QChart* m_pChart;

   QLineSeries* m_pPixelSeries;

   QPointF  m_StartPoint;  //拖拽起点

   bool  m_bIsDragging;     //是否拖拽

   double m_dStartY;

};

MyChartView.cpp里面

virtual void mousePressEvent(QMouseEvent *event) override {
        if (event->button() == Qt::LeftButton) {
            QPointF qpoint = m_pChart->mapToValue(event->pos());
            QList<QAbstractSeries *> lSeriesList = m_pChart->series();
            //寻找离点最近的一条线
            for(QAbstraceSeries *serie : lSeriesList){
             QLineSeries *lineSeries = static_cast<QLineSeries*>(serie);
             for(auto &point : lineSeries->points()){
                if(QVector2D(point- qpoint).length < 50){  //这边是设置精度
                    m_pPixelSeries = lineSeries; 
                    m_StartPoint = point;
                    m_bIsDragging = true;
                    return; //找到即返回
            }
           }
          }
        }
        QChartView::mousePressEvent(event);
}

//我这边是根据图像Gama的规则更新曲线的
virtual void mouseMoveEvent(QMouseEvent *event) override {
        if (isDragging && targetSeries) {
         //代码内容太多了 下次再更新
        }
        QChartView::mouseMoveEvent(event);
}

virtual void mouseReleaseEvent(QMouseEvent *event) override {
        if (event->button() == Qt::LeftButton && m_bIsDragging) {
            m_bIsDragging= false;
            m_pPixelSeries = nullptr;
        }
        QChartView::mouseReleaseEvent(event);
}

  • 24
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值