Qt图形图像开发曲线图表模块QChart库缩放/平移详细方法与实例

  

  

(1)用鼠标框选一个矩形,把图放大到这个矩形

  
  

QChartView: setRubberBand (QChartView:: RectangleRubberBand);//XY方向同时放大到鼠标画出的矩形大小(也可以设置为只放大X轴或Y轴)

     

(2) setRubberBand函数同时也能使鼠标右键,具备缩小图的功能。

  

2,使用Qchart来平移和缩放

  
  

QChart:滚动(-10 5);//整体平移(-10 5),两个参数分别为Δx和Δy

  

QChart: zoomIn (x, y,宽度、高度);//缩放到指定的矩形

  

QChart:变焦(0.9),//整体缩放,参数为放缩系数,& lt; 1代表缩小,在1代表放大

  

QChart: zoomReset (),//把所有做过的zoomIn, zoomOut,放大全部撤销

     

3,使用QValueAxis或者QDateTimeAxis来平移和缩放

  

原理就是,通过设置X/Y轴的范围来实现平移和缩放。

  

例如,当前显示X的显示范围为(20、50),如果我们把X轴的显示范围扩大到[0,80),这样做的效果就是显示的图形变小了,也就实现了缩放。

  

例如,当前显示X的显示范围为[0,30],如果我们把X轴的显示范围扩大到10,40,这样做的效果就是显示的图形左移了,也就实现了平移。

  

示例代码:

  
  

QValueAxis * axisX=dynamic_cast   

qreal cur_x_min=axisX→min ();

  

qreal cur_x_max=axisX→max ();

  

axisX→setRange (cur_x_min + 20, cur_x_max + 20);//图形向左平移20(为什么+代表左移?仔细想想就明白了)

     

放缩与平移的示例代码同理

  

Qt曲线图表模块QChart库缩放,平移实例

  

运行效果如下:

  

 Qt图形图像开发曲线图表模块QChart库缩放/平移详细方法与实例

  

. h文件代码

        的ifndef QTCHARTDEMOZOOM_H_38020FA5_FC74_4395_A807_61BF924D2F06   #定义QTCHARTDEMOZOOM_H_38020FA5_FC74_4395_A807_61BF924D2F06   # include & lt; QtCharts/QChartView>   使用名称空间QtCharts;   类QtChartDemoZoom:公共QChartView   {   Q_OBJECT   公众:   QtChartDemoZoom (QWidget * pParent=nullptr);   ~ QtChartDemoZoom ();   保护:   虚拟空间摇干(QMouseEvent *增加)覆盖;   虚拟空间mousePressEvent (QMouseEvent *增加)覆盖;   虚拟空间mouseReleaseEvent (QMouseEvent *增加)覆盖;   虚拟空间wheelEvent (QWheelEvent *增加)覆盖;   私人:   bool m_bMiddleButtonPressed;   QPoint m_oPrePos;   };   # endif//QTCHARTDEMOZOOM_H_38020FA5_FC74_4395_A807_61BF924D2F06      

. cpp文件代码

        # include & lt; QLineSeries>   QtChartDemoZoom: QtChartDemoZoom (QWidget * pParent/*=nullptr */)   :QChartView (pParent)   m_bMiddleButtonPressed(假)   m_oPrePos (0, 0)   {   新QLineSeries QLineSeries * pLineServies=();   for (int i=0;我& lt;100;+ + i)   {   pLineServies→添加(我,qrand () % 10);   }   这→图表()→addSeries (pLineServies);   这→图表()→createDefaultAxes ();   }   QtChartDemoZoom:: ~ QtChartDemoZoom ()   {   }   空白QtChartDemoZoom:摇干(QMouseEvent *增加)   {   如果(m_bMiddleButtonPressed)   {   QPoint oDeltaPos=增加→pos ()——m_oPrePos;   这→图表()→滚动(-oDeltaPos.x (), oDeltaPos.y ());   m_oPrePos=增加→pos ();   }   __super:摇干(增加);   }   空白QtChartDemoZoom: mousePressEvent (QMouseEvent *增加)   {   如果(增加→按钮()==Qt:: MiddleButton)   {   m_bMiddleButtonPressed=true;   m_oPrePos=增加→pos ();   这→setCursor (Qt:: OpenHandCursor);   }   __super: mousePressEvent(增加);   }   空白QtChartDemoZoom: mouseReleaseEvent (QMouseEvent *增加)   {   如果(增加→按钮()==Qt:: MiddleButton)   {   m_bMiddleButtonPressed=false;   这→setCursor (Qt:: ArrowCursor);   }   __super: mouseReleaseEvent(增加);   }   空白QtChartDemoZoom: wheelEvent (QWheelEvent *增加)   {   qreal rVal=std::战俘(0.999,增加→三角洲());//设置比例//1。读取视图基本信息   QRectF oPlotAreaRect=这→图表()→plotArea ();   QPointF oCenterPoint=oPlotAreaRect.center ();//2。水平调整   oPlotAreaRect.setWidth (oPlotAreaRect.width () * rVal);//3。竖直调整   oPlotAreaRect.setHeight (oPlotAreaRect.height () * rVal);//4.1计算视点,视点不变,围绕中心缩放//QPointF oNewCenterPoint (oCenterPoint);//4.2计算视点,让鼠标点击的位置移动到窗口中心//QPointF oNewCenterPoint(增加→pos ());//4.3计算视点,让鼠标点击的位置尽量保持不动(等比换算,存在一点误差)   QPointF oNewCenterPoint (2 * oCenterPoint -增加→pos ()——(oCenterPoint——增加→pos ())/rVal);//5。设置视点   oPlotAreaRect.moveCenter (oNewCenterPoint);//6。提交缩放调整   这→图表()→zoomIn (oPlotAreaRect);   __super: wheelEvent(增加);   }

Qt图形图像开发曲线图表模块QChart库缩放/平移详细方法与实例