(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库缩放,平移实例
运行效果如下:
. 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库缩放/平移详细方法与实例